Spring值注入 - 如果没有env变量则默认为来自file的系统属性

Jar*_*zew 2 java spring spring-el

我正在寻找一种从环境变量到pojo注入值的简洁方法,但是没有设置env变量的默认值.我知道这个语法:

@Value("#{systemProperties['JDBC_CONNECTION_STRING'] ?: \"jdbc:mysql://localhost:3306/mydb?user=root\"}")
Run Code Online (Sandbox Code Playgroud)

但这意味着我必须在java文件中硬编码默认值.我宁愿在属性文件中使用它.可能吗?

我需要这个,因为在AWS EBS上,env变量只是传递属性的方法,但我们不在那里部署.在其他地方我想从文件中读取道具.

Mic*_*les 5

在spring.xml配置文件中,添加以下内容:

<context:property-placeholder order="-50"/>
Run Code Online (Sandbox Code Playgroud)

然后

<context:property-placeholder order="0" location="classpath:x.y.z/application.properties"/>      
Run Code Online (Sandbox Code Playgroud)

第一个property-placholder将从系统属性加载所有值,第二个将从属性文件加载.

请注意系统属性的顺序是如何比应用程序属性少一个,因此系统属性优先.

现在在您的类文件中,您只需执行以下操作:

@Value("${JDBC_CONNECTION_STRING}")
private String jdbcConnectionString
Run Code Online (Sandbox Code Playgroud)

它将从系统属性(如果存在)和应用程序属性(如果它不在系统属性中)中注入值.

我还想做的是有另一个属性文件,我从S3加载,其顺序介于上述两个之间,所以我可以覆盖默认值.