java - @ServiceActivator如何在Spring Boot中从属性文件读取inputChannel?

标签 java spring spring-boot google-cloud-pubsub

我开发了 google pubsub 消费者,当我使用固定值“my-alpha-pubsub-topic”时,它就完成了运行

@ServiceActivator(inputChannel = "my-alpha-pubsub-topic" )
 public void messageReceiver(String payload) {
  LOGGER.info("Message arrived! Payload: " + payload);

 }

但是我在 Kubernetes 中的容器上运行它,我需要通过环境从 env 参数传递 inputChannel 值,以实现 1 个容器构建支持多个环境

Alpha => inputChannel = "my-alpha-pubsub-topic"
Staging => inputChannel = "my-staging-pubsub-topic"
Production => inputChannel = "my-pubsub-topic"

购买时无法在 inputChannel 中传递参数。运行失败

@Value("${pubsub.name}")
 private String pubsubName;


@ServiceActivator(inputChannel = "${pubsubName}" )
 public void messageReceiver(String payload) {
  LOGGER.info("Message arrived! Payload: " + payload);

 }

我尝试了这个但失败了

@ServiceActivator(inputChannel = "${pubsubName}" ) 
@ServiceActivator(inputChannel = "#{${pubsubName}}" )
@ServiceActivator(inputChannel = "${pubsub.name}" )

如何从属性或环境参数将值传递给 inputChannel

最佳答案

问题是你不能使用 @ServiceActivator(inputChannel = "${pubsub.name}") 因为 inputChannel 需要指定 spring bean 的限定符而不是环境变量。 我想您的代码中的某个地方有一个带有限定符 my-alpha-pubsub-topic 的 channel ,这就是它第一次起作用的原因。

就我的观点而言,使用 spring 配置文件创建所有这些 bean 并为每个环境提供类似以下内容会更有意义

 @Profile("Staging") 
 @ServiceActivator(inputChannel = "my-staging-pubsub-topic" ) 
 public void messageReceiver(String payload) {
    LOGGER.info("Message arrived! Payload: " + payload);
 }

关于java - @ServiceActivator如何在Spring Boot中从属性文件读取inputChannel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59663664/

相关文章:

java - spring boot 文件上传错误

java - 表示 HATEOAS 链接上的请求正文

java - 无法从 Spring Boot 中的/static 文件夹中读取资源

Java graphics2D fillRect 不能正确处理半透明颜色

java - 无法使用 `debugImplementation ' androidx.fragment :fragment-testing :'+fragment_version` as a dependency 运行应用程序

java - 为什么 saveStateInstance 在屏幕方向上不起作用?

java - 检索 IP 和 MAC 地址

Spring MVC 3 嵌套对象验证失败,@Valid

java - Spring Boot 2.1 bean 覆盖与 Primary

java - 如何使用 spring 记录 RestTemplate 请求和响应?