1. 程式人生 > >Spring.profiles多環境配置原理

Spring.profiles多環境配置原理

宣告多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
>

使用java執行引數指定profiles

java執行時可以指定jvm記憶體引數,這個大家都知道。形式類似下面這樣去指定java虛擬機器啟動的記憶體設定。

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

修改tomcat啟動指令碼,直接修改JAVA_OPTS:

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

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

JAVA 命令引數詳解:

1、-D<name>=<value> set a system property  設定系統屬性

可以通過System.getProperty("spring.profiles.active")獲得這個值。

在虛擬機器的系統屬性中設定屬性名/值對,執行在此虛擬機器之上的應用程式可用
當虛擬機器報告類找不到或類衝突時可用此引數來診斷來檢視虛擬機器從裝入類的情況。

另外,javac -d <目錄> 指定存放生成的類檔案的位置

Standard System Properties

Key Meaning
"file.separator" Character that separates components of a file path. This is "/" on UNIX and "\" on Windows.
"java.class.path" Path used to find directories and JAR archives containing class files. Elements of the class path are separated by a platform-specific character specified in the path.separator property.
"java.home" Installation directory for Java Runtime Environment (JRE)
"java.vendor" JRE vendor name
"java.vendor.url" JRE vender URL
"java.version" JRE version number
"line.separator" Sequence used by operating system to separate lines in text files
"os.arch" Operating system architecture
"os.name" Operating system name
"os.version" Operating system version
"path.separator" Path separator character used in java.class.path
"user.dir" User working directory
"user.home" User home directory
"user.name" User account name

 所謂的 system porperty,system 指的是 JRE (runtime)system,不是指 OS。

總結

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