在Spring中使用表达式application.properties文件

时间:2017-08-16 03:02:12

标签: spring spring-boot

可以将表达式用作Spring application.properties文件中的右侧值吗?

例如,像这样:

logging.level.com.acme=#{'${MY_RUN_ENV}'=='PROD'?'WARN':'DEBUG'}

具体而言,工作。但是,我想知道我是否可以做类似于那里的事情

3 个答案:

答案 0 :(得分:4)

不,您不能在属性文件中使用SpEL。

  

Finally, while you can write a SpEL expression in @Value, such expressions are not processed from Application property files.

但您可以在属性文件中use placeholders,例如:

app.name=MyApp
app.description=${app.name} is a Spring Boot application

对于您的用例,您应该查看profile-specific configuration机制。

允许您根据环境配置文件加载不同的配置。

答案 1 :(得分:1)

不可以,From spring boot reference

  

功能@ConfigurationProperties

     

SpEL评估否

相反,您可以在制作中使用application-default.properties,并在其中定义loglevel=WARN。 在您的application.properties

loglevel=DEBUG
logging.level.com.acme=${loglevel}

特定于配置文件的属性文件(默认情况下为-default)应覆盖application.properties的属性,更多信息here

答案 2 :(得分:1)

使用基于配置文件的属性文件。

在application-dev.properties中: logging.level.com.acme = WARN

并在application-prod.properties中: logging.level.com.acme = DEBUG

仅当春季启动在基于配置文件的文件中找不到属性时,它使用默认值中的值。因此,您可以在application.properties中设置属性,并在其值更改时在基于配置文件的文件中覆盖它们。