Spring boot 当JndiConnectionFactory';不需要

Spring boot 当JndiConnectionFactory';不需要,spring-boot,jndi,Spring Boot,Jndi,我有一个Spring Boot应用程序,可以在两个配置文件下运行,默认配置文件是在应用程序服务器下运行时使用的,通过JNDI可以使用JMS消息队列,另一个配置文件使用嵌入式JMS队列(不涉及JNDI) 对于我的默认配置文件,我有如下条目: @Profile("default") public class JmsConfigurationJNDI { @Resource(mappedName = "jms/InboundAsynchronousQueue") private D

我有一个Spring Boot应用程序,可以在两个配置文件下运行,默认配置文件是在应用程序服务器下运行时使用的,通过JNDI可以使用JMS消息队列,另一个配置文件使用嵌入式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-mydefault类似这样的配置的名称:

spring:
  jms:
     jndi-name: jms/__defaultConnectionFactory
但我不希望在我的其他配置文件中设置该设置,因为如果设置了JndiConnectionFactoryAutoConfiguration,则会关闭并配置我不想要的JndiConnectionFactory


那么,如果没有单独的JNDI特定配置文件,而没有支持JNDI连接工厂的默认配置文件,我怎么能说我的备用配置文件不包含默认配置文件中指定的属性呢?

使用应用程序-{profile}.properties执行上述操作如何?换句话说,application-default.properties包含jndi连接工厂详细信息的配置

请参阅链接至

以上链接的摘录:

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

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

13) jar中打包的特定于概要文件的应用程序属性(应用程序-{Profile}.properties和YAML变体)


我的默认配置文件中已经有默认属性。我想要的是第二个配置文件,用丢失的属性替换默认配置文件中的属性。很抱歉,我不确定我是否完全理解。我想您应该有两个属性文件,即application-default.properties和application-local.properties,其中spring.jms.jndi-name属性是在application-default.properties中定义的,而不是在application-local.properties中定义的。当spring.profiles.active=default时,当使用spring.profiles.active=local设置时,它只运行load only application-default.properties,反之亦然。我假设您只运行其中一个配置文件,而不是同时运行这两个配置文件。