如何在不同的临时环境中维护java webapps?

时间:2008-09-18 16:05:09

标签: java spring configuration web-applications

您可能拥有一组在开发人员计算机上使用的属性,这些属性因开发人员而异,另一组用于登台环境,另一组用于生产环境。

在Spring应用程序中,您可能还有要在本地环境中加载但不在生产环境中加载的bean,反之亦然。

你怎么处理这个?您是否使用单独的文件,ant / maven资源过滤或其他方法?

13 个答案:

答案 0 :(得分:7)

我只是将各种属性放在JNDI中。这样每个服务器都可以配置,我可以有一个war文件。 如果属性列表很大,那么我将在另一台服务器上托管属性(或XML)文件。我将使用JNDI指定要使用的文件的URL。

如果您要为每个环境创建不同的应用程序文件(war / ear),那么您不会部署正在测试的相同战争/耳朵。

在我的一个应用中,我们使用了几种REST服务。我只是将根URL放在JNDI中。然后,在每个环境中,可以将服务器配置为与该环境的正确REST服务进行通信。

答案 1 :(得分:2)

我只是为每台机器使用不同的Spring XML配置文件,并确保从这些Spring配置文件加载的bean引用了不同机器之间的所有配置数据位。

例如,我有一个连接到另一个应用程序的Java RMI界面的webapp。我的应用程序通过在Spring XML配置文件中配置的bean获取此其他应用程序的RMI接口的地址。我的应用程序和其他应用程序都有开发,测试和生产实例,因此我的应用程序有三个配置文件 - 一个对应于适合生产实例的配置,一个用于测试实例,一个用于开发实例

然后,我唯一需要保持的是将配置文件部署到哪台机器。到目前为止,我没有遇到创建Ant任务的策略的任何问题,该任务处理在生成WAR文件之前将正确的配置文件复制到位;因此,在上面的例子中,我有三个Ant任务,一个生成生产WAR,一个生成dev WAR,另一个生成测试WAR。所有这三个任务都处理将正确的配置文件复制到正确的位置,然后调用相同的下一步,即编译应用程序并创建WAR。

希望这有点意义......

答案 2 :(得分:2)

我们使用特定于环境的属性文件,并在构建jar / wars时让ant build选择正确的set。

也可以通过目录服务(JNDI)处理特定于环境的事物,具体取决于您的应用服务器。我们使用tomcat,我们的DataSource是在Tomcat的只读JNDI实现中定义的。 Spring使查找变得非常容易。

我们还使用ant策略在同一个源项目中构建不同的站点(不同的内容,安全角色等)。

有一件事使我们对这个构建策略有点麻烦,那就是在构建运行之前文件和目录通常不存在,因此它很难编写真正的集成测试(使用可以在IDE中运行的,与部署时相同的弹簧设置)。您还错过了IDE检查文件存在等的一些能力。

答案 3 :(得分:2)

我使用Maven过滤掉项目中src / main / resources下的资源。我将它与属性文件结合使用,以在我的基于Spring的项目中引入自定义属性。

对于默认构建,我在我的主目录中有一个属性文件,然后Maven用作覆盖(因此可以正确找到我的本地Tomcat安装之类的东西)。测试服务器和生产服务器是我的其他配置文件只需一个简单的-Pproduction就可以为我的生产服务器构建一个应用程序。

答案 4 :(得分:2)

使用不同的属性文件并使用ant替换过滤器,它将根据构建完成的环境进行替换。 见http://www.devrecipes.com/2009/08/14/environment-specific-configuration-for-java-applications/

答案 5 :(得分:1)

单独的配置文件,存储在源控件存储库中并手动更新。通常,配置在一个版本和下一个版本之间不会发生根本变化,因此同步(即使是手动)也不是一个主要问题。

对于生产环境中的高度可扩展系统,我将认真推荐一种方案,其中配置文件保存在模板中,并且作为构建脚本的一部分,这些模板用于呈现“最终”配置文件(所有环境都应使用相同的过程)。

答案 6 :(得分:1)

我最近还使用Maven进行实时或临时环境的替代配置。 Production configuration using Maven Profiles。希望它有所帮助。

答案 7 :(得分:0)

我将Ant的副本与过滤器文件一起使用。 在带有变量的配置文件的目录中,我有一个目录,其中包含每个环境的文件。构建脚本知道env并使用正确的变量文件。

答案 8 :(得分:0)

我有不同的配置文件夹,其中包含目标部署的配置,我使用ANT选择在文件复制阶段使用的配置文件。

答案 9 :(得分:0)

我们针对不同的环境使用不同的蚂蚁目标。我们这样做的方式可能有点不雅,但它确实有效。我们将告诉某些ant目标过滤掉不同的资源文件(这是如何排除某些bean的加载),加载不同的数据库属性,以及将不同的种子数据加载到数据库中。我们并没有真正的蚂蚁'专家',但我们能够通过一个命令运行不同配置的构建。

答案 10 :(得分:0)

我看到的一个解决方案是配置暂存环境,使其与生产环境完全相同。这意味着每个环境都具有相同IP范围的VLAN,以及相同IP地址上的计算机角色(例如,每个环境中的db cluster IP始终为192.168.1.101)。防火墙将面向外部的地址映射到Web服务器,因此通过交换PC上的主机文件,可以使用相同的URL - http://www.myapp.com/webapp/file.jsp将转到临时或生产,具体取决于您交换的主机文件。 / p>

我不确定这是一个理想的解决方案,维护起来非常繁琐,但这是一个值得注意的问题。

答案 11 :(得分:0)

Caleb P和JeeBee可能拥有您最快的解决方案。此外,您不必设置不同的服务或指向不同计算机上的文件。您可以使用$ {user.name}变量或在Ant或Maven的-D参数中指定配置文件来指定您的环境。

此外,在此设置中,您可以拥有通用属性文件,并覆盖特定环境的属性文件。 Ant和Maven都支持这些功能。

答案 12 :(得分:0)

不要忘记调查PropertyPlaceholderConfigurer - 这在JNDI不可用的环境中特别有用