如何在 Spring-Boot 的生产过程中覆盖 application.properties?

2022-08-31 15:39:26

我正在使用Spring Boot,并在开发过程中通过.application.properties@Configuration @Profile("dev")

spring.profiles.active=dev
spring.config.location=file:d:/application.properties

在生产过程中,我想在应用程序上下文之外创建一个文件,该文件应该加载,然后使用d:/application.properties激活一个不同的配置文件:

spring.profiles.active=production

结果:当我启动应用程序时,配置仍然是 ,因此不知何故,生产属性文件的其他位置未被考虑在内。我错过了什么吗?dev

弹簧靴 1.1.0.构建快照

注意:这个问题不是关于雄猫的。


答案 1

我知道你问过如何做到这一点,但答案是你不应该这样做。

相反,有一个 ,等等,并通过 args 将配置文件切换到 JVM:例如application.propertiesapplication-default.propertiesapplication-dev.properties-Dspring.profiles.active=dev

您还可以在测试时使用以下命令覆盖某些内容@TestPropertySource

理想情况下,所有内容都应该在源代码管理中,以便不会出现意外,例如,您如何知道服务器位置中有哪些属性,以及缺少哪些属性?如果开发人员引入新事物会发生什么?

Spring Boot已经为您提供了足够的方法来正确做到这一点。

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html


答案 2

您还可以使用@PropertySources

@PropertySources({
        @PropertySource(value = "classpath:application.properties"),
        @PropertySource(value = "file:/user/home/external.properties", ignoreResourceNotFound = true)
})
public class Application {
    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);

    }


}

推荐