Spring 覆盖 application.properties 中的环境变量

问题描述 投票:0回答:1

我有一个spring项目,其中有一个application.properties文件,以及一个application-profile1.properties和一个application-profile2.properties。

application-profile1/2.properties 内部有一个属性,我们称之为 my.first.property。 我需要的行为如下:

在 application-profile1.properties 中,my.first.property 将具有硬编码值,例如:

my.first.property=propertyvalue
。 在 application-profile2.properties 中,my.first.property 将尝试从环境中导入值,例如:
my.first.property=${MY_FIRST_PROPERTY}

问题是,无论我做什么,在我的@Configuration类中,当我声明一个变量myFirstPropery时,spring将始终寻找匹配的环境变量,并且会忽略application.properties文件,如果它找到一个匹配项。 我怎样才能实现所需的行为?有没有办法阻止 spring 将环境变量优先于我的 .properties 文件?

spring environment-variables properties-file
1个回答
0
投票

针对不同的环境,您可以创建不同的属性文件。

为了发展(当地环境)

application-dev.properties

用于生产(实时环境)

application.properties

您可以使用相同的变量名称和不同的值。

最需要注意的是你应该在应用程序类中配置环境。

public class YourApplication extends SpringBootServletInitializer {

    //profiles("dev") is for local
    public static void main(String[] args) {
        new SpringApplicationBuilder()
                .profiles("dev")
                .sources(GisApplication.class)
                .run(args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder
                .profiles("dev")
                .sources(YourApplication.class);
    }

您可以取消实时配置文件部分的注释,并将

dev
保留为本地配置文件。

希望有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.