不工作spring.config.additional-location

时间:2018-12-11 17:53:44

标签: java maven spring-boot

行家:

<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

的src / main / resources / application-local.properties中获取价值。
@Service
public class TestProps {

    @Value("${test.prop}")
    String testProp;

    @PostConstruct
    void run() {
        System.out.println(testProp);
    }
}

错误在哪里?还是一个错误?

2 个答案:

答案 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可以跳过它,而其他配置可以提供每个活动配置文件的值,并使它们在本地计算机上安全。