1. 程式人生 > >Spring.profiles多環境配置最佳實踐

Spring.profiles多環境配置最佳實踐

tex 優先 root cati ans 其他 true 環境 opts

轉自:https://www.cnblogs.com/jason0529/p/6567373.html

Spring的profiles機制,是應對多環境下面的一個解決方案,比較常見的是開發和測試環境的配置。

配置項目

Spring的profiles有兩個變量可以配置

  • spring.profiles.default 默認值,優先級低。當active沒有配置時,使用此變量。
  • spring.profiles.active 優先級高,指定當前容器使用哪個profile。

一般用法

聲明多profile

如果使用spring的profiles機制,第一步要在applicationContext.xml中配置多環境實例。

 <beans profile="development">
    <!-- 開發環境,具體加載bean或者properties文件 -->
 </beans>
 <beans profile="test">
   <!-- 測試環境,具體加載bean或者properties文件 -->
 </beans>   

激活profile

在J2EE項目中,一般通過web.xml配置。

<context-param>
   <param-name>spring.profiles.default</param-name>
   <param-value>development</param-value>
</context-param>

 或者

<context-param>
   <param-name>spring.profiles.default</param-name>
   <param-value>test</param-value>
</context-param>

兩個方式都可以,一般推薦第一種。主要原因在於:方便擴展,沒有指定具體profile,可通過其他方式覆蓋;一般情況下開發環境是使用最多的情況。

測試環境激活profile

Spring-test 中提供了一個__ActiveProfiles__的註解,可以標註當前測試用例使用的具體profile

@ActiveProfiles("test")
public abstract class SpringTransactionalTestCase {
}

使用java運行參數指定profiles

java運行時可以指定jvm內存參數,這個大家都知道。形式類似下面這樣去指定java虛擬機啟動的內存設置。

JAVA_OPTS=" -Xms1024m -Xmx1024m  -XX:PermSize=512m -XX:MaxPermSize=512m"

Java也可以指定啟動的環境變量,比如CATALINA_HOME啊之類的,通過ps命令,可以清楚的看到,java啟動的時候不同的軟件是通過不同的-D參數來達到效果的。tomcat的啟動情況:

root      2284     1  0 3月16 ?       00:01:54 /opt/jdk/bin/java -Djava.util.logging.config.file=/opt/apache-tomcat-8.0.32/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m -Djava.endorsed.dirs=/opt/apache-tomcat-8.0.32/endorsed -classpath /opt/apache-tomcat-8.0.32/bin/bootstrap.jar:/opt/apache-tomcat-8.0.32/bin/tomcat-juli.jar -Dcatalina.base=/opt/apache-tomcat-8.0.32 -Dcatalina.home=/opt/apache-tomcat-8.0.32 -Djava.io.tmpdir=/opt/apache-tomcat-8.0.32/temp org.apache.catalina.startup.Bootstrap start

 

回到正題,那這樣,是不是也可以通過這種形式,來指定profile的呢?答案是肯定的。
修改tomcat啟動腳本,直接修改JAVA_OPTS:

JAVA_OPTS=" -Xms1024m -Xmx1024m  -XX:PermSize=512m -XX:MaxPermSize=512m -Dspring.profiles.active=test"

啟動tomcat,發現整個系統啟動時,使用profile=test的bean被激活了,證明配置生效。

總結

使用java的系統參數-D方式即減輕了耦合性,也降低了開發和維護之間交流協作的部分。當有多個部署環境時,提前部署好指定的profile,這點在datasource的指定上面極為好用。

Spring.profiles多環境配置最佳實踐