如何在不需要时停止Spring Boot自动配置JndiConnectionFactory

时间:2017-01-25 15:38:26

标签: spring-boot jndi

我有一个可以在两个配置文件下运行的Spring Boot应用程序,默认配置是在通过JNDI提供JMS消息队列的app服务器下运行时使用的,以及使用嵌入式JMS队列的备用配置文件(否) JNDI参与其中)。

对于我的默认个人资料,我的条目如下:

@Profile("default")
public class JmsConfigurationJNDI {


    @Resource(mappedName = "jms/InboundAsynchronousQueue")
    private Destination inboundAsynchronousQueue;

对于我的嵌入式配置文件,我有这个:

@Profile({"local"})
public class JmsConfigurationLocal {

    @Inject
    private ConnectionFactory connectionFactory;

    @Bean
    public JmsTemplate inboundAsynchronousQueueTemplate () {
        JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
        jmsTemplate.setDefaultDestinationName("inboundAsynchronousQueue");
        return jmsTemplate;
    }

我遇到的问题是我需要设置 我的默认配置的spring.jms.jndi-name如下:

spring:
  jms:
     jndi-name: jms/__defaultConnectionFactory

但是我不想为我的其他配置文件设置该设置,因为如果设置 JndiConnectionFactoryAutoConfiguration 关闭并配置我不想要的 JndiConnectionFactory

那么我怎么能说我的替代配置文件不包含默认情况下指定的属性,而没有单独的JNDI特定配置文件而不是默认配置文件恰好是支持JNDI连接工厂的配置文件?

1 个答案:

答案 0 :(得分:0)

如何使用application- {profile} .properties来完成上述操作?换句话说,application-default.properties包含jndi-connection工厂详细信息的配置。

请参阅spring-boot-features-external-config

的链接

以上链接的摘录:

  

Spring Boot使用一个非常特殊的PropertySource命令,旨在允许合理地覆盖值。按以下顺序考虑属性:

     

...

     

12)打包jar之外的特定于配置文件的应用程序属性(application- {profile} .properties和YAML变体)

     

13)在jar中打包的特定于配置文件的应用程序属性(application- {profile} .properties和YAML变体)