2012-09-06 33 views
0

现在我的团队处理大约4-5个不同的服务器和大约2-3个不同的数据库服务器,我们使用环境变量来决定我们正在使用哪台服务器以及要使用哪种服务器配置。在多台服务器上运行一个文件

有没有更好的方式来做到这一点,因为我的团队不断扩大?我已经考虑过编译器标志/参数,但它看起来并不健壮。

回答

1

从我的角度来看,在Java中,你已经基本上3种方式来破解这个cookie:

  1. 环境变量
  2. -D JVM参数(这是系统属性)
  3. 性文件

你已经发现了环境变量,这几乎是“unix方式”来获得你所追求的效果;与通用二进制文件不同的配置,它为正在执行的环境定制正在运行的应用程序。

系统属性真的是环境变量的Java“道德等价物”。他们来通过应用程序的命令行就像-D参数...

java -Dlogback.configurationFile=/opt/dm/logback.xml -cp app.jar org.rekdev.App 

明确性质的Java文件处理http://docs.oracle.com/javase/tutorial/essential/environment/properties.html是你经常看到加上-D要达到这样的默认行为第三变体,它可以在运行时从命令行覆盖。这就是基本上与上面的logback.xml配置有关的事情,JAR文件里面有一个logback.xml文件,除非有一个名为“logback.configurationFile”的系统属性存在,否则应用程序将加载它。

当您试图找出如何在多服务器环境中保持全部同步并正常工作时,请考虑使用厨师http://wiki.opscode.com/display/chef/Home来进行部署,并将每个特定环境的自定义置于厨师控制之下。将厨师“食谱”放在版本控制中,并且配置管理充分。

发货!

0

我可以看到两个场景

  1. 您嵌入你的包内的所有不同的属性(可以是战争,耳,罐,或文件系统/yourapp/etc/上)
  2. 你只嵌入一个属性文件而这一次编译过程中生成(用Ant或Maven)

说出你的应用程序被命名为foo

解决方案1 ​​

它的优点是您的应用程序可以按原样放在任何受支持的服务器上(所有应用程序包中都有属性文件)。 您的房产将命名为foo.dev.propertiesfoo.test.properties,foo.prod.properties,foo.damien.properties,foo.bob.properties

另一个优点是,每个开发人员都有自己的开发文件,他可以安全地推送svn/git/whatever,并确保其他开发人员不会破坏他的配置。

在运行时,应用程序可以检查-D参数,甚至可以通过dinamycally检索主机名,以便加载正确的属性文件。

解决方案2

它的优点是你的包不会被不必要的属性文件污染。

您必须配置很多ant任务/ maven目标才能为特定环境构建。您的源代码目录中也会包含环境的属性文件,但只有一个将随应用程序一起提供。这一个foo.properties将只有值的占位符,并且将使用foo.ENV.properties和正确的ant任务/ maven目标在其中推断值。

在我的实际工作和以前的工作中,我们确实使用了解决方案1,我认为它带来了灵活性。 一些参数(如数据库用户/密码)直接从Unix服务器上的环境变量中获取(因此只有服务器管理员知道凭据)。

您可以安全地混合解决方案,以获得您感觉到的地方,为您和您的团队提供更大的灵活性。

相关问题