2016-06-07 75 views
0

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

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

这一切工作,但显然队列名称不能被硬编码的,它必须是可配置的。使事情复杂化,我们使用一些自定义类来读取配置数据,因此使用@PropertySource和属性文件是不可能的。

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

回答

0

回答我自己的问题,就像我能想到的最简单的事情似乎可以解决我的问题。 在我@Configuration I类增加了以下内容:

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

然后CustomPropertySource类简单地查找任何键被要求在它的CustomConfiguration。张贴在这里希望它可以帮助别人;如果有人对此解决方案有任何评论/改进,我很乐意听到它。