java如何外部化web应用程序(war)的属性文件?
我开发了一个包含jsp和java代码的Web应用程序。现在,我已经将所有键值放入了一个特定于环境/生命周期的属性文件(如conf-dev.properties、conf stg.properties、conf-prod.properties)
我想将这些属性文件外部化,以便将其放置在war之外(而不影响war)。 现在war文件与属性文件紧密耦合。如果我必须修改任何东西,我必须构建、进行战争和部署
我对部署服务器计算机的访问权限非常有限(只能访问一个文件夹,我可以在其中放置配置文件)&;部署过程由CI(jenkin&;automated script)处理
我在互联网上进行了探索,了解到我们可以使用spring实现这一点,想知道实现这一点的最佳方法是什么
# 1 楼答案
谢谢@Martin F
已解决:这是我使用的最后一个,它在dev,stage Env中工作良好
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="ignoreUnresolvablePlaceholders" value="false"/> <property name="order" value="1"/> <property name="locations"> <list> <value>classpath:conf-${cisco.life}.properties</value> <value>file:///${openshift.home}/data/conf-${cisco.life}.properties</value> <value>file:${openshift.home}/data/conf-${cisco.life}.properties</value> </list> </property> </bean>
我在openshift中使用了脚本操作钩子来设置系统级的生命周期
appname=
echo$OPENSHIFT_APP_NAMEcase "$appname" in *dev)export JAVA_OPTS_EXT="${JAVA_OPTS_EXT} -Dcisco.life=dev"; echo "setting up env life dev for " $appname ;; *stage)export JAVA_OPTS_EXT="${JAVA_OPTS_EXT} -Dcisco.life=stg; echo "setting up env life as stg for " $appname
# 2 楼答案
如果我理解你的问题,那么你可以使用链接的Javadoc所说的^{} (部分)
# 3 楼答案
将特定于环境的属性外部化的更好方法是使用“user.home”或“user.dir”
# 4 楼答案
当您使用Spring时,我想您已经使用了
PropertyPlaceholderConfigurer
。如果不是,你应该;)属性文件的位置可以是任何可以解析为spring
Resource
的内容。这包括类路径、servletcontext以及作为URI的文件引用(file:///...(对于绝对路径)https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html