spring-boot - Spring Boot 通过外部属性禁用 @JmsListener
问题描述
我有一个应用程序,它有一个方法@JmsListener
用于侦听来自远程 JMS 代理的传入消息(即本例中的 Apache ActiveMQ Artemis)。但是,现在我想禁用此方法(使用@JmsListener
),但不删除它,以便我可以在没有代理的环境中重用此方法的功能,同时我可以继续在经纪人所在的环境。
有可能实现这一目标吗?如果是,如何?
解决方案
我想我想通了。
第 1 步 禁用 jms 自动启动
我在 Spring Boot 配置中使用默认的 jms 侦听器容器工厂
@Bean(name = "jmsListenerContainerFactory")
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
DefaultJmsListenerContainerFactory factory =
new DefaultJmsListenerContainerFactory();
factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
factory.setSessionTransacted(true);
factory.setConnectionFactory(cachingConnectionFactory());
return factory;
}
所以要禁用它,我需要将配置修改为这样的东西
@Bean(name = "jmsListenerContainerFactory")
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(
**@Value("${spring.jms.listener.auto-startup}") boolean autoStart**) {
DefaultJmsListenerContainerFactory factory =
new DefaultJmsListenerContainerFactory();
factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
factory.setSessionTransacted(true);
factory.setConnectionFactory(cachingConnectionFactory());
**factory.setAutoStartup(autoStart);**
return factory;
}
注意: ** 用于强调
第 2 步更新 application.properties/application.yml
如果使用 yml 格式,请将其添加到application.yml
spring:
jms:
listener:
auto-startup: true
如果使用属性格式,请将其添加到application.properties
spring.jms.listener.auto-startup=true
step no.3运行spring boot神器
如果你想禁用 jms 然后运行你的工件
java -jar myjarfile.jar --spring.jms.listener.auto-startup=false
这应该足以禁用 jms,但是如果您想启用 jms,那么只需执行您的工件
java -jar myjarfile.jar
或者
java -jar myjarfile.jar --spring.jms.listener.auto-startup=true *(redundant)*
注意: ** 用于强调