通过定义系统属性spring.profiles.active, Spring允许我们使用XML配置或@Profile注释根据活动的概要文件名称创建不同的bean。 众所周知,系统属性可以在Spring XML文件中使用,我们将利用这一点。
在这篇文章中,我将展示如何使用Spring配置文件为所有环境创建一个包,以及如何在Apache Tomcat上运行它。
示例架构
我认为最常见和想要的体系结构是,在开发,测试和生产上部署的应用程序仅在包含配置的已使用属性文件中有所不同时。 WAR包含所有环境的配置,并且在运行时选择了正确的环境。 因此,如果在应用程序资源中包含以下文件,则是最好的:
srcmainresources- config_dev.properties- config_production.properties...
配置Spring属性占位符
为了在Spring中加载属性文件,我们使用<context:property-placeholder />
或@PropertySource批注。 在我的示例中,我将遵循XML配置方法来加载属性文件:
<?xml version='1.0' encoding='UTF-8'?>
<beans xmlns='http://www.springframework.org/schema/beans'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xmlns:context='http://www.springframework.org/schema/context'xsi:schemaLocation='http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsd'><context:property-placeholder location='classpath:config_${spring.profiles.active}.properties' /></beans>
配置Tomcat
现在是时候告诉Tomcat哪个配置文件处于活动状态了。 至少有办法做到这一点:
- 在web.xml中定义上下文参数 –破坏了“针对所有环境的一个包”的声明。 我不建议那样
- 定义系统属性-Dspring.profiles.active =您的活动配置文件
我认为定义系统属性是更好的方法。 那么如何为Tomcat定义系统属性呢? 在Internet上,我可以找到很多建议,例如“ modify catalina.sh”,因为您找不到用于执行此类操作的任何配置文件。 修改catalina.sh是一个肮脏的无法维护的解决方案。 有更好的方法可以做到这一点。
只需在Tomcat的bin目录中创建包含以下内容的文件setenv.sh :
JAVA_OPTS='$JAVA_OPTS -Dspring.profiles.active=dev'
并且它将在运行catalina.sh启动或运行期间自动加载。
结论
使用Spring概要文件,我们可以创建可以在多个环境中部署的灵活应用程序。 与Maven配置文件方法有何不同? 使用Maven,构建应用程序的人必须定义应该在哪个环境中运行。 通过上述方法,环境决定了其开发,测试还是生产。 因此,我们可以使用完全相同的WAR文件并将其部署到任何地方。
参考: Software Development Journey博客上的JCG合作伙伴 Maciej Walkowiak提供的Spring 3.1配置文件和Tomcat配置 。
翻译自: https://www.javacodegeeks.com/2012/06/spring-31-profiles-and-tomcat.html