Spring启动自动配置AutoConfigureAfter

时间:2016-09-11 11:35:22

标签: java spring spring-boot jms jndi

我正在尝试创建一个后备ConnectionFactory,以防JndiConnectionFactoryAutoConfiguration没有为我创建一个。

这是班级的样子

@Configuration
@AutoConfigureAfter(JndiConnectionFactoryAutoConfiguration.class)
@ConditionalOnMissingBean(ConnectionFactory.class)
@ConditionalOnClass(ConnectionFactory.class)
public class JmsFallbackAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    ConnectionFactory fallbackConfiguration() {
        ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        System.out.println("Created: " + activeMQConnectionFactory);
        return activeMQConnectionFactory;
    }

}

我期待的是Spring启动,一些自动配置正在进行,我们到达JndiConnectionFactoryAutoConfiguration,注意到我设置了spring.jms.jndi-name并创建了ConnectionFactory bean。

然后,在某些时候,我期待它到达JmsFallbackAutoConfiguration,当它应该注意到我们已经有一个ConnectionFactory(由JndiConnectionFactoryAutoConfiguration配置)并继续前进。

但事实并非如此,JmsFallbackAutoConfiguration总是执行,我不知道我错过了什么。

示例项目https://github.com/apixandru/case-study/tree/master/spring-boot-weblogic-jms/spring-boot-weblogic-jms-war

1 个答案:

答案 0 :(得分:1)

DataTemplate与您使用JmsFallbackAutoConfiguration注释的主应用程序类位于同一个包中。这意味着它将通过组件扫描找到。您需要将其移动到单独的包中,以使其与主应用程序类或其子包不在同一个包中。