Java项目中的多个.properties文件

Dan*_*ton 0 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做他们的事情.

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

Qwe*_*rky 6

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

application-dev.properties
application-test.properties
application-prod.properties
Run Code Online (Sandbox Code Playgroud)

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

java -Denv=test
Run Code Online (Sandbox Code Playgroud)

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

String props = "application-" + System.getProperty("env") + ".properties";
Run Code Online (Sandbox Code Playgroud)

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

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

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