【问题标题】:@ServiceActivator How to read inputChannel from property file in spring boot?@ServiceActivator 如何在 Spring Boot 中从属性文件中读取 inputChannel?
【发布时间】:2020-04-27 00:58:14
【问题描述】:

我开发 google pubsub 消费者,当我使用修复值“my-alpha-pubsub-topic”时,它已完成运行

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

 }

但我在 Kubernetes 的容器上运行它,我需要通过 Environment 传递来自 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}" )

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

【问题讨论】:

  • @ServiceActivator(inputChannel = "${pubsub.name}" ) 应该可以工作。异常说明了什么?
  • @Vladucu net.trueid.platform.cmschange.MyGcpSubPlanetApplication 中方法 messageChannelAdapter 的参数 0 需要一个找不到的 'org.springframework.messaging.MessageChannel' 类型的 bean。注入点有以下注解: - @org.springframework.beans.factory.annotation.Qualifier(value="${pubsub.name}") 找到以下候选但无法注入: - 用户定义的 bean 方法'MyGcpSubPlanetApplication' 中的 'myInputChannel' - 用户定义的 bean - 用户定义的 bean
  • 好的,我意识到问题出在哪里。您不能使用@ServiceActivator(inputChannel = "${pubsub.name}" ),因为inputChannel 需要接收spring bean 的限定符而不是env 变量。我想在您的代码中的某个地方,您有一个带有限定符 my-alpha-pubsub-topic 的频道,这就是它第一次起作用的原因。也许使用 spring 配置文件创建所有这些 bean 并具有以下内容是有意义的:@Profile("Staging") @ServiceActivator(inputChannel = "my-staging-pubsub-topic" ) public void messageReceiver。每个环境一个。
  • @Vladucu Voican 这解决了我的问题。你可以回答,我会接受你的回答
  • 很高兴听到这个消息,我会在一分钟内添加它。也谢谢你。

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


【解决方案1】:

问题是你不能使用 @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);
 }

【讨论】:

    猜你喜欢
    • 2019-01-11
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2018-09-28
    • 2018-10-16
    • 2019-07-23
    • 2018-10-27
    • 2020-07-01
    相关资源
    最近更新 更多