Spring 启动自动配置AutoConfigureAfter
Spring boot autoconfiguration AutoConfigureAfter
我正在尝试创建一个后备 ConnectionFactory,以防 JndiConnectionFactoryAutoConfiguration 没有为我创建一个。
这是 class 的样子
@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。
然后,在某个时候,我希望它在注意到我们已经有一个 ConnectionFactory(由 JndiConnectionFactoryAutoConfiguration 配置)并继续前进时到达 JmsFallbackAutoConfiguration。
但事实并非如此,JmsFallbackAutoConfiguration 始终执行,我不知道我错过了什么。
JmsFallbackAutoConfiguration
与您的主应用程序 class 位于同一个包中,用 @SpringBootApplication
注释。这意味着它将通过组件扫描找到它。您需要将它移动到一个单独的包中,以便它与您的主应用程序 class 或其子包之一不在同一个包中。
我正在尝试创建一个后备 ConnectionFactory,以防 JndiConnectionFactoryAutoConfiguration 没有为我创建一个。
这是 class 的样子
@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。
然后,在某个时候,我希望它在注意到我们已经有一个 ConnectionFactory(由 JndiConnectionFactoryAutoConfiguration 配置)并继续前进时到达 JmsFallbackAutoConfiguration。
但事实并非如此,JmsFallbackAutoConfiguration 始终执行,我不知道我错过了什么。
JmsFallbackAutoConfiguration
与您的主应用程序 class 位于同一个包中,用 @SpringBootApplication
注释。这意味着它将通过组件扫描找到它。您需要将它移动到一个单独的包中,以便它与您的主应用程序 class 或其子包之一不在同一个包中。