Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何外部化web应用程序(war)的属性文件?_Java_Spring_Tomcat7_Openshift Cartridge - Fatal编程技术网

Java 如何外部化web应用程序(war)的属性文件?

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

我开发了一个包含jsp和java代码的Web应用程序。现在,我已经将所有键值放入了一个特定于环境/生命周期的属性文件(如conf-dev.properties、conf stg.properties、conf-prod.properties)

我想将这些属性文件外部化,以便将其放置在war之外(而不影响war)。 现在war文件与属性文件紧密耦合。如果我必须修改任何东西,我必须构建、进行战争和部署

我在部署服务器机器上的访问权限非常有限(只能访问一个可以放置配置文件的文件夹)&部署过程由CI(jenkin&automated script)处理


我在互联网上进行了探索,了解到我们可以使用spring实现这一点,想知道实现这一点的最佳方法是什么吗?

如果我理解你的问题,那么你可以使用链接的Javadoc(部分)

此方法委托给此对象的类装入器。如果此对象是由引导类装入器装入的,则该方法将委托给


将特定于环境的属性外部化的更好方法是使用“user.home”或“user.dir”。

当您使用Spring时,我想您已经使用了
PropertyPlaceHolderConfigure
。如果不是,你应该;)

属性文件的位置可以是任何可以解析为spring
Resource
的内容。这包括类路径、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>