检查环境变量是否为null并在SpEL中获取文件

问题描述 投票:1回答:1

在我们的prod环境中,我们从tomcat中的server.xml提供confDir参数以获取.properties文件,但在开发和测试环境中,我们使用classpath中的属性文件。

像这样

<context:property-placeholder location="${confDir:}/jdbc.properties, ${confDir:}/webservice.properties" order="1" ignore-resource-not-found="true" ignore-unresolvable="true"/>
<context:property-placeholder location="classpath:jdbc.properties, classpath:webservice.properties" order="2"/>

现在我想使用util:properties标签加载这些属性文件,如下所示,用于在@Value中访问它们并检查null,如果null则指定默认值

<util:properties id="classpathProps" location="classpath:jdbc.properties" local-override="false" />
<util:properties id="confDirProps" location="{confDir:}/jdbc.properties" local-override="false" />

util:properties的问题在于,当我们不提供confDir属性时它会抛出异常。

有人可以帮我解决这个问题。我尝试了各种SpEL表达式

location="#{${confDir}?${confDir:}/jdbc.properties:''}"

检查confDir是否为空,但我的试验结果是徒劳的。

spring spring-mvc spring-el
1个回答
1
投票

你不需要SpEL;只需使用普通属性占位符默认值...

<util:properties id="foo" location="${foo:classpath:}props"/>

然后,如果你没有foo属性运行,你得到......

class path resource [props] cannot be opened because it does not exist

如果你和-Dfoo=bar/一起跑,你得到......

class path resource [bar/props] cannot be opened because it does not exist

如果你用-Dfoo=file:/bar/运行

/bar/props (No such file or directory)

${foo:classpath:}props中,如果属性foo不存在,则使用第一个冒号后的值作为替换值。

© www.soinside.com 2019 - 2024. All rights reserved.