行家:
<profiles>
<profile>
<id>local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<active.spring.profile>local</active.spring.profile>
</properties>
</profile>
</profiles>
application.properties:
spring.profiles.active=@active.spring.profile@
spring.config.additional-location=classpath:/profile/application-${spring.profiles.active}.properties
此后,我无法从包含test.prop=123
@Service
public class TestProps {
@Value("${test.prop}")
String testProp;
@PostConstruct
void run() {
System.out.println(testProp);
}
}
错误在哪里?还是一个错误?
答案 0 :(得分:4)
属性spring.config.additional-location
必须作为程序参数提供,例如:java -jar whatever.jar --spring.config.additional-location=classpath:/profile/application-local.properties
。
在application.properties
中包含它没有任何意义。来自documentation:
或者,当使用来配置自定义配置位置时 spring.config.additional-location,除了 默认位置。 在搜索其他位置之前, 默认位置。
由于在默认位置之前之前搜索了其他位置,因此必须提前提供,因此您不能在application.properties
答案 1 :(得分:0)
additional-location实际上不属于application.properties,因为Spring不会从那里解释它。它需要在默认配置文件之前加载其他配置文件。 另一方面,在Maven Spring Boot插件中设置默认的附加位置很方便。这样,就可以在项目源之外设置安全敏感信息,并且该信息不会出现在源存储库中。例如,客户端安全性配置可以显示为:
`app:
client:
ssl:
keystore: path/to/keystore
keystore-password: the-keystore-password
key-password: the-key-password`
src / main / resources中的默认application.yml可以跳过它,而其他配置可以提供每个活动配置文件的值,并使它们在本地计算机上安全。