我有一个可以在两个配置文件下运行的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连接工厂的配置文件?
答案 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变体)