在Spring Boot应用中禁用Spring JMS自动配置

25
在我的Spring Boot应用程序中,我配置了两个不同的MQQueueConnectionFactory实例(具有不同的ID),因为这是应用程序的需求。为此,我已经添加了IBM客户端JAR包。
我还在代码中添加了spring-jms依赖项,因为我想使用JmsTemplate等类。添加此依赖项后,JmsAutoConfiguration在类路径中找到JmsTemplate并尝试配置bean。在此过程中,它尝试注入类型为ConnectionFactory的bean,这就是代码失败并开始出现错误的地方。以下是来自JmsAutoConfiguration的代码。
@Configuration
@ConditionalOnClass(JmsTemplate.class)
@ConditionalOnBean(ConnectionFactory.class)
@EnableConfigurationProperties(JmsProperties.class)
@Import(JmsAnnotationDrivenConfiguration.class)
public class JmsAutoConfiguration {

    @Autowired
    private JmsProperties properties;

    @Autowired
    private ConnectionFactory connectionFactory;

    @Autowired(required = false)
    private DestinationResolver destinationResolver;

我是否有办法关闭Spring Boot的JmsAutoconfiguration功能?如果没有,那么有什么替代方案吗?


未来的Apache Tomcat Java WAR部署用户请注意,如果您在catalina.out中看到错误信息Caused by: java.lang.NoSuchMethodException: org.springframework.jms.annotation.JmsBootstrapConfiguration$$EnhancerBySpringCGLIB$$9f8a2d0.CGLIB$SET_THREAD_CALLBACKS([Lorg.springframework.cglib.proxy.Callback;),您可以尝试以下解决方案。 - tom_mai78101
4个回答

31

您可以将要禁用的自动配置添加到SpringBootApplication注释中:

@SpringBootApplication(exclude = JmsAutoConfiguration.class)

4
或者:@EnableAutoConfiguration(exclude = JmsAutoConfiguration.class)表示禁用JMS自动配置。 - Benny Bottema

18

供参考,使用此方法来禁用ActiveMQ

@SpringBootApplication(exclude = ActiveMQAutoConfiguration.class)

16

如果想通过属性(在这种情况下是application.yml文件)来控制它,则可以像这样操作。

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.jms.JmsAutoConfiguration

6

在我的情况下,排除这两个类后它起作用了:

 @EnableAutoConfiguration(exclude={JmsAutoConfiguration.class, ActiveMQAutoConfiguration.class})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接