我们正在开发一个大型的J2ee电子销售解决方案.它有很多集成:CMS,ERP,邮件服务器等.所有这些系统分为测试和生产环境.
我们需要将我们的应用程序部署到具有测试配置的测试服务器,并且当部署到我们的生产服务器时,它应该使用生产配置.我们如何让我们的应用程序选择正确的属性?
到目前为止我们尝试过的是:
我们所有的属性文件都包含测试属性和生产属性
test.mvxapi.server = SERV100TS test.mvxapi.username = user test.mvxapi.password = password test.mvxapi.port = 6006 test.mvxapi.cono = 600 mvxapi.server = SERV10001 mvxapi.username = user mvxapi.password = password mvxapi.port = 6001 mvxapi.cono = 100
读取这些属性的Util有一个开关:isTest(),它以"test"为键前缀.
public String getProperty(String property)
{
return properties.getProperty(prefix + "" + property);
}
交换机由我们的构建服务器创建的另一个属性设置.构建.EAR时,我们的生产服务器的脚本将(输入到build.xml)"isProduction = true"注入system.properties.
<propertyfile file="${buildDir}/system.properties">
<entry key="isProduction" value="${systemType}"/>
</propertyfile>
Run Code Online (Sandbox Code Playgroud)
我不确定这是最好的方法.如果出于某种原因"isProduction = false"被错误地提交给我们的生产环境,那么一切都是松散的.
我已经读过人们在服务器上本地拥有属性.但我们真的不想让文件传播开来.我们有生产服务器集群.确保每个服务器都具有正确的属性文件似乎不是故障安全的
您想要避免的是将配置文件放在 EAR 中,这样做的问题是您需要针对不同环境的不同 EAR,而且更改配置文件需要重新构建。
而是将相同的EAR 部署到每个服务器,但使用不同的 URL 资源配置每个服务器。iow,将JNDIURL 资源添加到您部署到该资源的配置文件中的所有服务器。如果您对存储库具有只读 SVN 访问权限,则在 svn 存储库或可通过 URL 访问的任何存储库上创建配置文件。这里最酷的事情是您的所有配置都是集中的,因此管理它们很容易。
我所做的(通过使用 spring 进行自定义)是确保JNDIURL 资源是可选的。因此,如果存在,应用程序将使用它,如果不存在,则不会。无论应用程序是否存在,该应用程序都会启动。这样,即使在没有JNDI可用资源的情况下运行,应用程序仍然可以运行(例如开发环境)。
| 归档时间: |
|
| 查看次数: |
4524 次 |
| 最近记录: |