Java 如何外部化web应用程序(war)的属性文件?
我开发了一个包含jsp和java代码的Web应用程序。现在,我已经将所有键值放入了一个特定于环境/生命周期的属性文件(如conf-dev.properties、conf stg.properties、conf-prod.properties) 我想将这些属性文件外部化,以便将其放置在war之外(而不影响war)。 现在war文件与属性文件紧密耦合。如果我必须修改任何东西,我必须构建、进行战争和部署 我在部署服务器机器上的访问权限非常有限(只能访问一个可以放置配置文件的文件夹)&部署过程由CI(jenkin&automated script)处理Java 如何外部化web应用程序(war)的属性文件?,java,spring,tomcat7,openshift-cartridge,Java,Spring,Tomcat7,Openshift Cartridge,我开发了一个包含jsp和java代码的Web应用程序。现在,我已经将所有键值放入了一个特定于环境/生命周期的属性文件(如conf-dev.properties、conf stg.properties、conf-prod.properties) 我想将这些属性文件外部化,以便将其放置在war之外(而不影响war)。 现在war文件与属性文件紧密耦合。如果我必须修改任何东西,我必须构建、进行战争和部署 我在部署服务器机器上的访问权限非常有限(只能访问一个可以放置配置文件的文件夹)&部署过程由CI(j
我在互联网上进行了探索,了解到我们可以使用spring实现这一点,想知道实现这一点的最佳方法是什么吗?如果我理解你的问题,那么你可以使用链接的Javadoc(部分) 此方法委托给此对象的类装入器。如果此对象是由引导类装入器装入的,则该方法将委托给
将特定于环境的属性外部化的更好方法是使用“user.home”或“user.dir”。当您使用Spring时,我想您已经使用了
PropertyPlaceHolderConfigure
。如果不是,你应该;)
属性文件的位置可以是任何可以解析为springResource
的内容。这包括类路径、servletcontext以及作为URI的文件引用(file:///... (对于绝对路径)
谢谢@Martin F
已解决:这是我使用的最后一个,它在dev,stage Env中工作良好
类路径:conf-${cisco.life}.properties
文件://${openshift.home}/data/conf-${cisco.life}.properties
文件:${openshift.home}/data/conf-${cisco.life}.properties
我在openshift中使用了脚本操作钩子来设置系统级的生命周期
appname=
echo$OPENSHIFT\u APP\u NAME
中的大小写“$appname”
*dev)export JAVA_OPTS_EXT=“${JAVA_OPTS_EXT}-Dcisco.life=dev”;
echo“为“$appname”设置环境生命开发
;;
*阶段)导出JAVA_OPTS_EXT=“${JAVA_OPTS_EXT}-Dcisco.life=stg;
echo“将env life设置为stg for”$appname
是的,这种方法看起来不错……但我需要检查如何根据环境加载所有属性文件(dev、stg、prod)。在openshift中,我可以编写操作钩子脚本来设置环境生命周期,如用于开发服务器的cisco.life=dev和用于后台服务器的cisco.life=stg等。您可以将属性config.file.location
声明为example@EF是的,我用这种方法加载属性文件..正在查找任何其他基于spring的方法。String cisco_life=System.getProperty(“cisco.life”);Properties configProp=new Properties();InputStream in=Thread.currentThread().getContextClassLoader().getResourceAsStream(“conf-”+cisco_life+“.Properties”);configProp.load(in);
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="${config.file.location}" />
</bean>