一勞永逸部署項目:通過tomcat加載環境變量


一勞永逸部署項目:通過tomcat加載環境變量

轉載自:https://blog.csdn.net/u010414666/article/details/46499953

一、說明

項目中經常會用到xxx.properties作為一些參數的配置文件,而這些參數都是在啟動tomcat時加載到環境變量中以便后面代碼進行調用的。由於項目特殊性,需要將同一個war部署多份,分別連接各自的數據庫,為了拷貝多個項目等繁瑣的操作,減少部署的麻煩,探索了tomcat加載環境變量的加載方法,這樣一來,在后續更新項目時,只需要替換一個war文件即可達到部署多個項目的效果。

 

這種方式也適用於其它部署項目的場景:

當項目中properties或其它配置文件中的環境變量參數較多時,每次部署項目都需要修改大量的配置參數,如:在不同環境下連接不同數據庫、不同用戶名密碼、不同的上傳路徑等,每次部署項目時都需要將properties文件中的相關配置進行修改,不僅工作量大,而且容易出錯,所以這種加載環境變量的部署方式可以大大簡化操作並降低出錯的可能性。

二、方法:

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中,其中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、測試:

TestProperties.java

@Service
public class TestService { @Value("${enterpriseName}") private String enterpriseName; @Value("${enterprise.name}") private String enterprise_name;  @PostConstruct public 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM