当有多个活动配置文件时加载配置文件特定属性
Loading profile specific proeprties when there are mutiple active profiles
根据 http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html,我可以使用 application-${profile}.properties 加载不同的 application.properties 文件并设置活动配置文件。如果 application.properties 正在改变,那很好,但是如果我需要用 batch.properties 来做这件事呢?如果我有多个活动配置文件怎么办?例如:
spring.active.profile=oracle,hornetq,redis
并且我的属性是使用以下方式加载的:
<bean id="placeholderProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
depends-on="datasourceProperty">
<property name="locations" ref="propLocations" />
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="ignoreUnresolvablePlaceholders" value="true" />
<property name="order" value="1" />
</bean>
<util:list id="propLocations">
<value>classpath:batch-default.properties</value>
<value>classpath*:batch-${profile}.properties</value>
</util:list>
我假设 batch-${profile}.properties 会尝试查找具有任何活动配置文件的所有属性文件,所以 batch-oracle.properties、batch-redis.properties、批量-hornetq.properties
它找到的会使用,没有找到的将被忽略。然而,情况似乎并非如此,根本找不到 ${profile}。
如果我只有一个活动配置文件没问题,我可以只使用 ${spring.active.profile},但我在组件化我的应用程序时正在慢慢创建更多配置文件,我想使用配置文件加载属性而不创建一堆特定于配置文件的 属性 占位符 bean。
-----更新-----
根据 "M. Deinum" 的评论,我尝试了以下操作:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes={BatchBootApplication.class})
@WebIntegrationTest(value={"spring.config.name=application,batch"})
@ActiveProfiles("hsql")
public class BatchBootApplicationTest {
@Test
public void testAppContextLoads() {
}
}
我看到了属性文件。
默认情况下 Spring 引导加载 application.properties
并通过其加载机制加载 application-{profile}.properties
(或 yml
文件)。请参阅 Spring 引导参考指南的 External Config section。
为了override/extend 加载文件,您可以指定一个spring.config.name
环境变量。该变量可以采用逗号分隔的字符串来标识多个 属性 文件。请参阅示例 here。
因此,不要尝试自己破解一些东西,而是使用 Spring Boot.启动应用程序时,只需添加 -Dspring.config.name=application,batch,other file
和 Spring Boot 会将加载规则应用于所有指定的名称。
根据 http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html,我可以使用 application-${profile}.properties 加载不同的 application.properties 文件并设置活动配置文件。如果 application.properties 正在改变,那很好,但是如果我需要用 batch.properties 来做这件事呢?如果我有多个活动配置文件怎么办?例如:
spring.active.profile=oracle,hornetq,redis
并且我的属性是使用以下方式加载的:
<bean id="placeholderProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
depends-on="datasourceProperty">
<property name="locations" ref="propLocations" />
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="ignoreUnresolvablePlaceholders" value="true" />
<property name="order" value="1" />
</bean>
<util:list id="propLocations">
<value>classpath:batch-default.properties</value>
<value>classpath*:batch-${profile}.properties</value>
</util:list>
我假设 batch-${profile}.properties 会尝试查找具有任何活动配置文件的所有属性文件,所以 batch-oracle.properties、batch-redis.properties、批量-hornetq.properties
它找到的会使用,没有找到的将被忽略。然而,情况似乎并非如此,根本找不到 ${profile}。
如果我只有一个活动配置文件没问题,我可以只使用 ${spring.active.profile},但我在组件化我的应用程序时正在慢慢创建更多配置文件,我想使用配置文件加载属性而不创建一堆特定于配置文件的 属性 占位符 bean。
-----更新----- 根据 "M. Deinum" 的评论,我尝试了以下操作:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes={BatchBootApplication.class})
@WebIntegrationTest(value={"spring.config.name=application,batch"})
@ActiveProfiles("hsql")
public class BatchBootApplicationTest {
@Test
public void testAppContextLoads() {
}
}
我看到了属性文件。
默认情况下 Spring 引导加载 application.properties
并通过其加载机制加载 application-{profile}.properties
(或 yml
文件)。请参阅 Spring 引导参考指南的 External Config section。
为了override/extend 加载文件,您可以指定一个spring.config.name
环境变量。该变量可以采用逗号分隔的字符串来标识多个 属性 文件。请参阅示例 here。
因此,不要尝试自己破解一些东西,而是使用 Spring Boot.启动应用程序时,只需添加 -Dspring.config.name=application,batch,other file
和 Spring Boot 会将加载规则应用于所有指定的名称。