Java 是否可以将3.properties文件合并为一个.properties文件?
我有一个应用程序的3.properties文件。每个文件都用于开发、测试和生产环境。将这三个文件合并为一个文件是否可能(而且切实可行)?怎样才能做到呢?还是最好将每个文件保存在自己的环境中?这是代码Java 是否可以将3.properties文件合并为一个.properties文件?,java,Java,我有一个应用程序的3.properties文件。每个文件都用于开发、测试和生产环境。将这三个文件合并为一个文件是否可能(而且切实可行)?怎样才能做到呢?还是最好将每个文件保存在自己的环境中?这是代码 enter code here lock-timeout=7200000 usesLogin=true uses-hardlocks=false use-nested-roles=1 # Password Change URL for VSRD, VSRT and VSRP (in that or
enter code here
lock-timeout=7200000
usesLogin=true
uses-hardlocks=false
use-nested-roles=1
# Password Change URL for VSRD, VSRT and VSRP (in that order)
#pwchange-url=https://iteodova-md.dev.fema.net/va-npsc/pwchange/default.asp
#pwchange-url=https://iteodova-md.dev.fema.net/va-npsc/pwchange_tdl/default.asp
pwchange-url=https://iteodova-md.fema.net/va-npsc/pwchange/default.asp
# Database Connectivity and User Session Management
jdbc-driverClassName=oracle.jdbc.driver.OracleDriver
#jdbc-url=jdbc:oracle:thin:@wnli3d3.fema.net:1521:vsrd
#jdbc-url=jdbc:oracle:thin:@wnli3d2.fema.net:1521:vsrt
#jdbc-url=jdbc:oracle:thin:@mwli3d1.fema.net:1521:vsrp
jdbc-url=jdbc:oracle:thin:@wnli3d4.fema.net:1521:vsrp
您可以使用Apache中的
例如:
CompositeConfiguration config = new CompositeConfiguration();
config.addConfiguration(new PropertiesConfiguration("color.properties");
config.addConfiguration(new PropertiesConfiguration("application.properties"));
或包括在本例中:
# usergui.properties
include = colors.properties
include = sizes.properties
您可以通过这种方式在限定条件下使用属性 在下面的代码中,您可以
key=value
作为默认值,就像您现在和现在所做的一样
key.ENVIRON=value
如果该环境需要有所不同
正如您所看到的,代码非常简短,它允许比较不同的配置,因为它们都在一个地方
如果您有一个复杂的系统,可以使用ENVIRON.TYPE.INSTANCE扩展这种方法
public class EnvironProperties extends Properties {
private final String environ;
public EnvironProperties(String environ) {
this.environ = environ;
}
@Override
public String getProperty(String key) {
String property = super.getProperty(key + "." + environ);
return property == null ? super.getProperty(key) : property;
}
public String getEnviron() {
return environ;
}
public static void main(String... args) throws IOException {
String properties = "lock-timeout=7200000\n" +
"usesLogin=true\n" +
"uses-hardlocks=false\n" +
"use-nested-roles=1\n" +
"\n" +
"# Password Change URL for VSRD, VSRT and VSRP (in that order)\n" +
"pwchange-url=https://iteodova-md.dev.fema.net/va-npsc/pwchange/default.asp\n" +
"pwchange-url.PROD=https://iteodova-md.fema.net/va-npsc/pwchange/default.asp\n" +
"\n" +
"# Database Connectivity and User Session Management\n" +
"\n" +
"jdbc-driverClassName=oracle.jdbc.driver.OracleDriver\n" +
"jdbc-url.TEST=jdbc:oracle:thin:@wnli3d3.fema.net:1521:vsrd\n" +
"jdbc-url.DEV=jdbc:oracle:thin:@wnli3d2.fema.net:1521:vsrt\n" +
"jdbc-url.PROD=jdbc:oracle:thin:@mwli3d1.fema.net:1521:vsrp\n" +
"jdbc-url=jdbc:oracle:thin:@wnli3d4.fema.net:1521:vsrp";
EnvironProperties dev = new EnvironProperties("DEV");
EnvironProperties test = new EnvironProperties("TEST");
EnvironProperties prod = new EnvironProperties("PROD");
for (EnvironProperties ep : new EnvironProperties[]{dev, test, prod}) {
System.out.println("[" + ep.getEnviron() + "]");
ep.load(new StringReader(properties));
for (String prop : "uses-hardlocks,pwchange-url,jdbc-url".split(","))
System.out.println(prop + "= " + ep.getProperty(prop));
}
}
}
最好将属性保存在单独的文件中(即用于测试、暂存、生产等)。通过使用-D选项运行java,可以在它们之间切换:
java -DpropertiesType=test ...
属性重载和合并在中有效地完成
你们可以看看这个例子
祝你好运 我同意这样的观点,即最好将属性保存在单独的文件中。如果您使用环境变量或概要文件(如果您使用的是Spring),则可以将文件物理地分离到它们自己的目录中,例如“src/main/resources”。然后,您只需要根据您的环境变量或概要文件设置来读取正确的内容。如何做到这一点取决于Java堆栈的具体情况。例如,使用Spring和Java配置,您可以执行以下操作:
@Configuration
public class MyMainConfig {
public MyMainConfig() {
super();
}
@Configuration
@Profile("dev")
@PropertySource({ "classpath:/dev/myPropertyFileName.properties" })
static class Dev
{ }
@Configuration
@Profile("test")
@PropertySource({ "classpath:/test/myPropertyFileName.properties" })
static class Test
{ }
@Configuration
@Profile("prod")
@PropertySource({ "classpath:/prod/myPropertyFileName.properties" })
static class Prod
{ }
}
你好,Peter,我有一些关于最终用户想要什么的更多信息。他们正在使用Subversion,不希望签入和签出3个属性文件。另外,根据他们所处的环境对每个属性文件进行更改(因此Subversion中有3个属性文件)。因此,例如,他们希望能够对属性文件进行更改,并使其在所有环境中工作,而不必从dev、toTEST更改为PROD。这是否可以通过VSRD、VSRT和VSRP的#密码更改URL实现,以及#数据库连接和用户会话感谢您的帮助MikeThey可以像普通属性文件一样更改默认值。如果他们希望值不同,他们需要某种方法来给出多个值,并将值与环境匹配。2015文档位置: