评估Spring Expression Lang(SpEL)中的属性

时间:2013-03-19 21:13:28

标签: java spring properties expression spring-el

我们的服务有一个根据属性文件安排的流程,读取属性 refreshIntervalMillis 。它的值通过以下配置直接注入到Quartz触发器中:

<bean name="trigger"
    class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean "
    p:repeatInterval="${refreshIntervalMillis}"> 
...
</bean>

然而,安装此服务的管理员会考虑小时/天,所以为了让他们更容易,我们将其更改为:

  1. refreshIntervalMillis 重命名为 refreshIntervalMinutes
  2. 已将以上代码更改为以下内容:
  3. p:repeatInterval="#{ 1000 * 60 * T(java.lang.Integer).valueOf(@configurationProperties['garbageLevelWatcher.refreshIntervalMinutes'])}"
    

    注意:属性对象公开为名为“configurationProperties”的bean

    是否有更简单的语法来实现相同的目标?

    谢谢,

2 个答案:

答案 0 :(得分:7)

"#{T(java.util.concurrent.TimeUnit).MINUTES.toMillis( @configurationProperties['garbageLevelWatcher.refreshIntervalMinutes'])}"

编辑:

或者...

<context:property-placeholder properties-ref="configurationProperties"
<util:constant id = "MINUTES" static-field="java.util.concurrent.TimeUnit.MINUTES" />

"#{@MINUTES.toMillis(${garbageLevelWatcher.refreshIntervalMinutes})}"

答案 1 :(得分:1)

如果属性由PropertyPlaceholderConfigurer,@ PropertySource或&lt; context:property-placeholder /&gt;查找;并且上下文意识到它

你可以这样写:

p:repeatInterval="#{ 1000 * 60 * T(java.lang.Integer).valueOf('${garbageLevelWatcher.refreshIntervalMinutes}') }"