@PropertySource与spel一起使用(systemEnvironment和systemProperties)

Man*_*dan 6 spring spring-3 spring-java-config spring-4

我有src/main/resources以下文件

bpp-dev.properties
bpp-prod.properties
bpp-test.properties
Run Code Online (Sandbox Code Playgroud)

通过我的STS,我可以在两个位置定义密钥envB

  1. 如何在VM argument-DenvB=dev
  2. 如何Environment变量 envB价值 prod

如果在Configuration课堂上,我有以下内容。

@Configuration
@PropertySource("classpath:/com/manuel/jordan/properties/bpp-${envB}.properties")
public class PropertiesConfiguration {
Run Code Online (Sandbox Code Playgroud)

它工作正常,但始终优先于System Propertiesover Environment Variables,这是默认行为。我在这里没问题。

但是,如果我想与显式地工作Environment Variables,以下失败

@Configuration
@PropertySource("classpath:/com/manuel/jordan/properties/bpp-#{systemEnvironment['envB']}.properties")
public class PropertiesConfiguration {
Run Code Online (Sandbox Code Playgroud)

我总是收到:

Caused by: java.io.FileNotFoundException: 
class path resource 
[com/manuel/jordan/properties/bpp-#{systemEnvironment['envB']}.properties]
cannot be opened because it does not exist
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

如果我使用该功能@PropertySource并且只是在同一@Configuration堂课上玩,那么我将使用以下内容:

@Value("#{systemProperties['envB']}")
private String propertiesEnvB;
@Value("#{systemEnvironment['envB']}")
private String environmentEnvB;
Run Code Online (Sandbox Code Playgroud)

待稍后打印,两者都可以正常工作。