根据http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html我可以使用应用程序加载不同的application.properties文件 - $ {profile} .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>
我假设批处理 - $ {profile} .properties会尝试查找包含任何活动配置文件的所有属性文件,因此batch-oracle.properties,batch-redis.properties,batch-hornetq.properties < / p>
它发现它会使用的那些和未找到的那些将被忽略。但是,情况似乎并非如此,并且根本找不到$ {profile}。
如果我只有一个有效的配置文件,我可以使用$ {spring.active.profile},但我正在慢慢创建更多的配置文件,因为我组件化我的应用程序,我想使用配置文件加载属性没有创建一堆特定于配置文件的属性占位符bean。
-----更新----- 基于&#34; M的评论。 Deinum&#34;我尝试过以下方法:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes={BatchBootApplication.class})
@WebIntegrationTest(value={"spring.config.name=application,batch"})
@ActiveProfiles("hsql")
public class BatchBootApplicationTest {
@Test
public void testAppContextLoads() {
}
}
我看到了属性文件。
答案 0 :(得分:3)
默认情况下,Spring Boot加载application.properties
,加载机制也加载application-{profile}.properties
(或yml
个文件。请参阅Spring Boot Reference指南的External Config section。
要覆盖/扩展文件加载,您可以指定spring.config.name
环境变量。此变量可以使用逗号分隔的字符串来标识多个属性文件。请参阅示例here。
因此,不要试图一起破解某些东西,而是使用Spring Boot。启动应用程序时,只需添加-Dspring.config.name=application,batch,other file
,Spring Boot会将加载规则应用于所有指定的名称。