如何区分应用程序中的测试和生产属性?

Tom*_*mmy 10 java java-ee

我们正在开发一个大型的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"被错误地提交给我们的生产环境,那么一切都是松散的.

我已经读过人们在服务器上本地拥有属性.但我们真的不想让文件传播开来.我们有生产服务器集群.确保每个服务器都具有正确的属性文件似乎不是故障安全的

Mic*_*les 4

您想要避免的是将配置文件放在 EAR 中,这样做的问题是您需要针对不同环境的不同 EAR,而且更​​改配置文件需要重新构建。

而是将相同的EAR 部署到每个服务器,但使用不同的 URL 资源配置每个服务器。iow,将JNDIURL 资源添加到您部署到该资源的配置文件中的所有服务器。如果您对存储库具有只读 SVN 访问权限,则在 svn 存储库或可通过 URL 访问的任何存储库上创建配置文件。这里最酷的事情是您的所有配置都是集中的,因此管理它们很容易。

我所做的(通过使用 spring 进行自定义)是确保JNDIURL 资源是可选的。因此,如果存在,应用程序将使用它,如果不存在,则不会。无论应用程序是否存在,该应用程序都会启动。这样,即使在没有JNDI可用资源的情况下运行,应用程序仍然可以运行(例如开发环境)。