Java项目中的多个.properties文件

时间:2011-02-01 15:58:15

标签: java deployment configuration properties

我想找到一种在不同部署配置的多个.properties文件之间切换的权宜之计。

我最初的兴趣是创建一个单独的文件selector.properties,其单个属性用于确定正确的文件:

properties.file=deploymentConfiguration1.properties

...进行一次部署,或者:

properties.file=deploymentConfiguration2.properties

...用于下一次部署。

我团队中的另一位开发人员有一个ApplicationProperties类,其中:

private static final String PROP_FILE="someFileName.properties";

......是这样做的手段。但是,我想切换属性文件而不用重建!提前感谢您的意见。

编辑:也许我最初应该更清楚,但这是针对一组打包为AAR的Web服务。我将把它放到Web服务器上,让Tomcat和Axis2做他们的事情。

所以,我不认为命令行参数的一些答案在这种情况下会起作用。

3 个答案:

答案 0 :(得分:6)

拥有多个属性文件,每个env一个,例如;

application-dev.properties
application-test.properties
application-prod.properties

使用env作为系统属性启动您的应用程序;

java -Denv=test

从相关文件加载您的属性;

String props = "application-" + System.getProperty("env") + ".properties";

请注意,我通常不鼓励使用具有固定名称的属性文件,其中文件是在 build 时生成的。

修改
如果它是Web应用程序,您可以在部署描述符(web.xml)中设置env的值

<env-entry>
  <env-entry-name>myEnv</env-entry-name>
  <env-entry-type>java.lang.String</env-entry-type>
  <env-entry-value>test</env-entry-value>
</env-entry>

然后你可以像这样在你的网络应用中获得价值;

Context ctx = new InitialContext();
Context envCtx = (Context) ctx.lookup("java:comp/env");
String env = (String)envCtx.lookup("myEnv");
String props = "application-" + env + ".properties";

答案 1 :(得分:2)

添加一个指出配置文件的参数!

java Program -config deploymentConfiguration2.properties

答案 2 :(得分:0)

使用“属性管理器”属性文件的方法听起来不错。 主属性文件可以通过jvm参数作为参数传递给vm 但是这个过程的一个缺点是主属性文件在一段时间内变得不受管理。例如,您最终可能会保留一些不再有意义的旧属性文件引用。