是否有一种典型的方法来处理Java应用程序中不同tomcat实例的单独配置?

时间:2014-01-20 21:10:38

标签: java tomcat

我们的系统分为不同的环境,每个环境都作为一个单独的Tomcat实例。

  • 开发(Windows)
  • QA:由我们的质量保证部门(Linux)访问
  • 制作:实时网站,客户可以访问。 (Linux)的

这些环境中的每一个都依赖于单独的数据库和其他几种Web服务。这意味着我们需要跟踪各种不同的URL,用户名和密码。其中许多设置都是在多个应用中共享的,因此最好将它们放在一个位置以删除重复。

现在我们在应用程序本身中有配置文件。我们在构建应用程序时使用Maven配置文件填写不同的配置设置。但这很笨拙,因为我们必须为每个环境构建不同的WAR。

存储配置文件的好地方在哪里,以便我们可以将相同的WAR文件部署到每个服务器?


我已经对此进行了大量研究。但我还没有找到一个对我来说完全有意义的解决方案。

单独的配置目录

定义用于保存配置文件的目录。例如linux上的/opt/config

我喜欢这个想法,但是如何告诉Tomcat这个目录在哪里?我看到context.xml的引用,但是我看到的每个例子都将context.xml放在WAR内的META-INF文件夹中。有没有办法在WAR之外配置它?

定义环境的系统属性

这涉及设置系统属性,然后使用某种if / else或切换逻辑来加载适当的配置文件。这似乎可行,但有点凌乱。但是你在哪里/如何设置这个属性?我通常使用./startup.sh启动tomcat。我是否在该命令中添加了参数,或者在某处有其他配置?

JNDI

我认为这不是我们的选择。我为此看过的每个教程似乎都依赖于LDAP或类似的东西。据我所知,我们没有那个可用的东西,而且只需要为六个配置文件设置就可能有太多的开销。

2 个答案:

答案 0 :(得分:1)

使用引用配置文件或目录所在位置的系统属性。在这种情况下,您可以轻松管理不同的环境,而不需要if / else逻辑。

您的应用程序可以具有配置文件路径的硬编码值,这将允许运行应用程序而无需任何其他系统属性。但是,如果找不到强制数据,应用程序将无法启动。

关于在环境之间部分共享数据。 您可以按类别将数据拆分为多个文件。某些文件将被共享,其他一些文件将因不同的环境而不同。您甚至可以在数据文件之间开发自己的引用机制。

然而,更好的方法是使用一些即用型软件包。例如,Spring框架支持非常灵活的配置机制。但是,如果你已经有Spring-less应用程序引入这个框架进行配置,那么看起来就像是一种矫枉过正。在这种情况下,请查看Apache Commons Configuration package

答案 1 :(得分:0)

与我的团队合作,我们想出了一种更清洁的方法。虽然我发现的每个教程都将context.xml放在WAR中,但它也可以放在Tomcat目录的conf文件夹中。

这对我们有用,因为我们所有的服务器都是基于Tomcat的。因此,每个服务器都可以拥有自己的context.xml,它具有指向该特定服务器上的config文件夹的属性。