使用多个 maven 项目和持续集成(例如 hudson 或 jenkins)构建一个配置 jar,其中包含每个环境(dev、qa、prod)的所有属性文件,然后将所有内容捆绑为 EAR。但是,当需要时,事情不能在生产中轻易改变。
我认为配置应该在应用程序实例的数据库中。您的本地机器配置可能与 dev 和 QA、PROD、DR 等不同。
您需要的是一种以简单的方式将配置从数据库中取出的方法。
我创建了一个单独的项目,它提供了 Apache commons-configuration 的依赖项。它有多种存储数据的方式,但我喜欢数据库,并且配置存在于数据库环境中。
import javax.sql.DataSource;
import org.apache.commons.configuration.DatabaseConfiguration;
public class MYConfig extends DatabaseConfiguration {
public MYConfig(DataSource datasource) {
super(datasource, "TABLE_CONFIG", "PROP_KEY", "PROP_VALUE");
}
}
将大部分设置放在数据库中,并有一个简单的屏幕来修改它。在内部,我们可以拥有一个可以读取和修改值的通用配置服务 EJB。每个模块都可以有一个自定义扩展版本,该版本具有特定的 getter 和 setter。
Commons 配置作为一个简单的 API,然后您可以根据需要编写 GUI。您可以按照自己的意愿制作界面。或者作为一个速赢没有界面。
对所有属性文件进行版本控制,然后在生产中将其签出,并在进行更改后将其签入生产分支。
版本控制很棒。使用组合添加另一个 DatabaseConfiguration。您扩展的类是活动配置,组合类是审计。还有另一个构造函数可以有一个版本。只需重载正确的方法即可获得所需的效果。
import javax.sql.DataSource;
import org.apache.commons.configuration.DatabaseConfiguration;
public class MYConfig extends DatabaseConfiguration {
final DatabaseConfiguration audit;
public MYConfig(DataSource datasource) {
super(datasource, "TABLE_CONFIG", "PROP_KEY", "PROP_VALUE");
audit = new DatabaseConfiguration("TABLE_CONFIG_AUDIT", "PROP_KEY", "PROP_VALUE");
}
@Override
public void addProperty(String key, Object value) {
Object wasValue = super.getProperty(key);
super.addProperty(key, value);
audit.put(key,wasValue);//add version code
}
}
http://commons.apache.org/proper/commons-configuration/