在我们的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
是否为空,但我的试验结果是徒劳的。
你不需要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
不存在,则使用第一个冒号后的值作为替换值。