当两个属性文件具有相同的键时,@Value 不会从指定的 @PropertySource 获取值

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

我正在尝试创建两个类来从两个不同的属性文件(

application-e1.properties
application-e2.properties
)获取配置值。

application-e1.properties
=>

param=e1Test

application-e2.properties
=>

param=e2Test

我创建了 2 个类

EmployeeDev
EmployeeTest
来从各自的文件中读取:

@Component
@PropertySource("classpath:application-e1.properties")
public class EmployeeDev {

    @Value("${param}")
    String param;

    public String getParam() {
        return param;
    }

    public void setParam(String param) {
        this.param = param;
    }
}
@Component
@PropertySource("classpath:application-e2.properties")
public class EmployeeTest {

    @Value("${param}")
    String param;

    public String getParam() {
        return param;
    }

    public void setParam(String param) {
        this.param = param;
    }
}

每当我调用

EmployeeDev
EmployeeTest
时,它总是返回参数值作为
e2Test

我试图在这里一次创建 2 个配置文件的配置。 谁能帮我解决这个问题吗?

java spring-boot properties spring-profiles
1个回答
0
投票

根据 Spring 的文档,这就是

@PropertySource
所做的:

注释提供了一种方便的声明性机制,用于将 PropertySource 添加到 Spring 的环境中。与@Configuration类结合使用。

因此,此注释所做的就是向现有环境添加特定的属性源。

您的代码所做的是,它通过将属性合并到一个环境中来组合两个源 application-e1.propertiesapplication-e2.properties,而后面的属性会覆盖之前的属性。您现在有一个

Environment
,其中设置了
param=e2Test
。添加现有的属性源不会改变任何东西。

您应该做的是拥有不同的

Profiles
,在其相关属性文件中设置其属性,然后激活您需要的配置文件。如果您想在同一个配置文件中为不同用例设置不同的特定参数,则必须单独命名它们。

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