在Spring @JmsListener中配置目标名称

时间:2016-06-07 12:30:11

标签: spring configuration spring-jms spring-java-config

我有基于Spring的组件,需要能够通过JMS进行通信,并希望使用@JmsListener带注释的方法来执行此操作。我的监听器类需要读取JSON编码的有效负载,但还需要读取一些自定义标头。 我已经设置了一个@Configuration bean并将其添加到当前基于XML的配置中,我在其中配置了必要的消息转换器。目前我的监听器方法注释如下:

    @JmsListener(destination = "activemq:queue:queue.name")
    public void handleItemCommand(ProvisionItemCommand itemCommand, @Header(AUTH_HEADER_NAME) String auth) {

这一切都有效,但显然队列名称不能硬编码,需要配置。更复杂的是,我们使用一些自定义类来读取配置数据,因此使用@PropertySource和属性文件是不可能的。

我一直陷入困境的是看到如何设置以便这可能发生。 Spring 4.2参考文档告诉我创建并注册一个自定义PropertySource类(可以由我们的自定义配置代码支持),但doc(http://docs.spring.io/spring/docs/4.1.9.RELEASE/spring-framework-reference/htmlsingle/#beans-property-source-abstraction)中的示例只是创建一个应用程序上下文飞行并添加自定义属性源。 也许我在这里制定了一个盲点,但是如何创建自定义属性源并将其添加到已经存在的环境中?我在网上发现了几个局部的例子,但大多数是针对Spring 3的,有些似乎是矛盾的。 如果有人能够清除这一点,我会感激不尽,因为我认为我99%在那里,但不知怎的,最终的1%没有为我“点击”。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题,因为我能想到的最简单的事情似乎解决了我的问题。 在我的@Configuration课程中,我添加了以下内容:

@Autowired
public void setCustomConfiguration(CustomConfiguration customConfiguration, ConfigurableEnvironment env) {
    LOG.trace("setCustomConfiguration()");
    this.customConfiguration = customConfiguration;
    env.getPropertySources().addFirst(new CustomPropertySource("custom-config", customConfiguration));
}

然后CustomPropertySource类只需查找其CustomConfiguration中要求的任何键。发表在这里希望它能帮助别人;如果有人对此解决方案有任何评论/改进,我会很高兴听到它。