本文主要是介绍一劳永逸部署项目:通过tomcat加载环境变量,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、说明
二、方法:
1、添加环境变量
在tomcat中新建ent-hlsn.xml,内容如下:
ent-hlsn.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/ent-hlsn" docBase="E:\WorkSpace\Carbon\Enm\webapp\target\com.skytech.enm.web-0.2.2-SNAPSHOT" ><Environment name="enterpriseName" value="hlsn" type="java.lang.String" />
</Context>
该文件是将E:\WorkSpace\ent路径下的应用部署到tomcat中(关于在Intellij集成的tomcat中部署应用,请点这里),其中Environment 表示在启动tomcat后加载文件部署项目并将“enterpriseName”作为环境变量加入到tomcat中
(该文件为tomcat中部署项目时创建的context文件,即在tomcat_home/conf/Catalina/localhost路径下,详情参见tomcat部署应用的几种方式)
2、使用环境变量
修改applicationContext.xml中bean
applicationContext.xml
.....
<bean id="propertyConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"><property name="ignoreUnresolvablePlaceholders" value="true"/>......</property></bean>
.....
其中 class必须使用 org.springframework.context.support.PropertySourcesPlaceholderConfigurer ,否则spring无法使用上述步骤中的环境变量,PropertySourcesPlaceholderConfigurer 为spring 3.1以后版本提供,在3.1之前版本中若想加载环境变量需将bean配置调整如下:
applicationContext.xml
......
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><!--设置systemPropertiesModeName为SYSTEM_PROPERTIES_MODE_OVERRIDE 打开允许覆盖--><property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/><property name="ignoreUnresolvablePlaceholders" value="true"/>......
</bean>
......
3、测试:
@Service
public class TestService {@Value("${enterpriseName}")private String enterpriseName;@Value("${enterprise.name}")private String enterprise_name;@PostConstructpublic void getProp() {System.out.println("#################################");System.out.println("enterpriseName : " + enterpriseName);System.out.println("enterprise_name : " + enterprise_name);System.out.println("#################################");}
}
通过该方法即可取到ent-hlsn.xml中enterpriseName的值“hlsn”。
这里的注解@PostConstruct为spring容器初始化 bean时会调用的方法,如果项目中spring配置存在问题可能会没有被调用,如果是这样,那么控制台便无法打印出对应的输出信息,因此可以把输出信息放在项目必然会调用到的一些方法中进行测试,如果是web应用,也可以在一些方法中写上对应的输出语句并通过页面进行相应的操作来调用此处输出信息,以达到测试的效果。当然,如果spring配置没问题,可以直接像例子中这样进行测试,它可以在tomcat部署完应用后便打印出对应的环境变量信息。
三、其它测试:
在TOMCAT_HOME/conf/Catalina/localhost目录下再新建2个配置文件分别名为:ent-jbdc.xml、ent-sky.xml(这里的xml文件名即为项目部署的发布名,可根据自己项目的名称任意指定),配置文件内容如下:
ent-jbdc.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/ent-jbdc" docBase="E:\WorkSpace\Carbon\Enm\webapp\target\com.skytech.enm.web-0.2.2-SNAPSHOT" workDir="D:\app-work\jbdc"><Environment name="enterpriseName" value="jbdc" type="java.lang.String" /><Environment name="enterprise.name" value="jbdc--" type="java.lang.String" />
</Context>
ent-sky.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/ent-sky" docBase="E:\WorkSpace\Carbon\Enm\webapp\target\com.skytech.enm.web-0.2.2-SNAPSHOT" workDir="D:\app-work\sky"><Environment name="enterpriseName" value="sky" type="java.lang.String" /><Environment name="enterprise.name" value="sky--" type="java.lang.String" />
</Context>
启动tomcat
四、测试总结
1、多项目部署
当启动tomcat时。控制台能够正常打印出不同应用中enterpriseName 和 enterprise.name对应的环境变量值,说明多个应用之间不会存在冲突
2、环境变量命名规则
通过enterprise.name方式命名环境变量也能取值,说明环境变量命名规范中支持”.“符号命名环境变量
3、优先级
当web应用中properties文件内变量名和上述步骤xml文件中环境变量名相同时,tomca打印的是xml文件中配置的环境变量值,因此可以知道环境变量加载的优先级在xml中高于properties
这篇关于一劳永逸部署项目:通过tomcat加载环境变量的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!