@ServiceActivator 如何在 spring 启动时从 属性 文件中读取 inputChannel?

@ServiceActivator How to read inputChannel from property file in spring boot?

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

@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"

Buy 我无法在 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 的频道,这就是它第一次工作的原因。

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

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