覆盖Spring中的systemProperties?

时间:2016-01-14 03:51:06

标签: java spring

我有一些看起来像这样的代码:

@Value("#{systemProperties['TARGET_ENVIRONMENT']?: 'qa'}")
private String environment;

在我的集成测试中,此属性始终为空,我似乎无法做任何事情来定义它。我尝试在集成测试中做类似的事情,只是将目标环境属性覆盖到其他地方:

@Before
public void setUp(){
    System.setProperty("TARGET_ENVIRONMENT", "I love dogs");
}

但这并没有真正成功。

@Before
public void setUp(){
    System.setProperty("TARGET_ENVIRONMENT", "qa"); -> Not I love Dogs
}

@Value("$peopleSearch{key}") -> Defined as per properties file
private String peopleSearch;

@Value("$peopleSearch{address}") -> Defined as per properties file
private String address;

但这并没有真正改变任何事情。我有其他属性(如上所述),这些属性在属性文件中定义,可以正常工作并获取值,但是这个属性似乎使用了systemProperties属性,我不知道如何/在哪里修改。如何覆盖systemProperties属性?

1 个答案:

答案 0 :(得分:0)

mvn install -DskipTests 不是函数,而是变量。它在Spring上下文加载时初始化。这就是为什么在运行时设置系统属性不会影响测试的原因。 Here您可以找到有关SpringEL的更多详细信息。

您可以将系统属性systemProperties传递给测试的运行者。例如,如果在IDE(Eclipse或IntelliJ)中运行测试,则可以在“运行配置”的JVM参数下传递它。或者,如果您通过Maven运行它,请参阅this