@ServiceActivator 如何在春季启动中从属性文件中读取输入通道?



我开发了Google pubsub Consumer,当我使用固定值"my-alpha-pubsub-topic"时,它就完成了运行

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

但是我在 Kubernetes 中的容器上运行它,我需要通过环境从 env 参数传递输入通道值,用于 1 个容器构建支持多个环境

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

购买我不能在输入通道中传递参数。 它运行失败

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

我如何将值从属性或 env 参数传递给输入通道

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

在我看来,使用弹簧轮廓创建所有这些豆子会更有意义,并且为每个环境提供如下所示的内容

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