spring mvc多環境下配置文件的設置


在實際開發時經常需要把一些配置信息寫在配置文件,比如mysql的主機地址、端口號、用戶名和密碼等。另外,在開發代碼時可能用一套配置參數,而部署到測試環境時又會用另一套配置參數,測試完畢再部署到線上環境時,又需要使用線上環境下的另一套參數。因此,實際開發中面臨着如何給工程添加多個環境下的配置文件、且要保證不同環境下能自動使用不同的配置文件的問題。

spring提供了spring.profiles.active參數,通常情況下,這個值我們會設置為dev、test和online中的一個,分別代表開發環境、測試環境和線上生產環境。比如當spring.profiles.active的值為dev時,表示當前運行於開發環境下,應當使用開發環境下的配置文件。

通過在運行程序時給spring.profiles.active參數傳入不同的值以選擇不同的配置文件。這樣只需要打包一次,不必為不同的環境各打包一次了。

下面來演示如何在運行階段選擇配置文件。在上一篇的工程的基礎上進行修改(或者先將上面的工程恢復成最初的樣子)。

首先在resoures目錄下創建4個配置文件,分別為application.properties、application-dev.properties、application-test.properties和application-online.properties。其中application.properties文件里存放的是所有環境下都通用的配置信息,另外3個則分別對應開發環境、測試環境和線上環境的配置:

 

 

 

因為配置文件要到工程運行時才會進行選擇,因此,所有的配置文件都是需要打包到項目中的。先在3個環境下都通用的application.properties文件中加入一個配置項,參數為city.name,值為beijing:

city.name=beijing


和前面的例子一樣,dev、test和online環境的配置文件都配置了一個名為env.name的參數,值分別為env-dev、env-test和env-online。

接下來修改spring.xml,增加如下一行配置如下:

1 <context:property-placeholder location="classpath:application.properties, classpath:application-${spring.profiles.active}.properties"/>


這一行是告訴spring容器去哪加載配置文件。這里添加了兩個配置文件,一個是所有環境都通用的application.properties文件,另一個則取決於spring.profiles.active參數的值是多少,如果是dev(即開發環境),則是application-dev.properties文件;同理,如果是test(測試環境)則是application-test.properties文件;如果是online(線上環境)則是application-online.properties文件。

為了觀察配置的效果,修改HelloServiceImpl文件的內容如下:

 1 package com.mytest.service.impl;
 2 
 3 import com.mytest.service.HelloService;
 4 import org.springframework.beans.factory.annotation.Value;
 5 import org.springframework.stereotype.Service;
 6 
 7 @Service
 8 public class HelloServiceImpl implements HelloService {
 9 
10   @Value("${env.name}")
11   private String envName;
12 
13   @Value("${city.name}")
14   private String cityName;
15 
16   @Override
17   public String sayHello(String to) {
18     return "hello " + to + ", env.name:" + envName + ", cityName:" + cityName;
19   }
20 }

 

HelloServiceImpl除了引用了配置文件中的env.name參數外,還引用了通用配置文件中的city.name參數。

接下在maven命令行中執行如下命令構建整個工程:

1 clean package


這里構建時沒有再傳入任何參數了。

接下來將打包好的mvc-test-1.0-SNAPSHOT.war文件拷貝到tomcat的webapps目錄下,並改名為mvc-test.war。

運行時進行配置文件的選擇,其原理就是在用java命令執行java程序時傳入給spring.profiles.active參數不同的值,比如:

1 java xxx -Dspring.profiles.active=dev


這樣就在啟動程序時就把spring.profiles.active參數的設置為dev了。

因為tomcat是我們通常是用它自身bin目錄下的catalina.sh腳本來啟動的,所以我們把啟動參數寫到這個腳本里。打開catalina.sh腳本,搜索到如下行:

1 JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"

將其改成:

1 JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS -Dspring.profiles.active=dev"


表示現在是開發環境。保存並退出,然后在tomcat的bin目錄下執行以下命令以啟動tomcat:

1 sh ./catalina.sh run


然后在瀏覽器中輸入http://localhost:8080/mvc-test/hello?name=tom,回車即可看到結果:

 

可以看到,程序正確地選擇了開發環境下的配置文件。

用同樣的方法,將spring.profiles.active設置為test,並重新啟動tomcat,在瀏覽器中訪問,可以看到程序正確地選擇了測試環境下的配置文件:

 

 

 

將spring.profiles.active設置為online,並重新啟動tomcat,在瀏覽器中訪問,可以看到程序正確地選擇了線上環境的配置文件:

 

 

 

我們再看下tomcat的webapps目錄下,mvc-test的目錄結構:


可以看到所有的配置文件都打包到WEB-INF/classes目錄下了,因為是運行時才選擇配置文件,所以所有的配置文件都要打包過來。

綜上,可以將所有環境都通用的配置信息寫入到application.properties文件中,而不同運行環境下不同的配置信息則分別寫入到application-dev.properties、application-test.properties和application-online.properties文件中,再通過運行程序時給sring.profiles.active參數傳入不同的值(dev或test或online)即可完成不同運行環境下選擇不同的配置文件的功能。


免責聲明!

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



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