1. 程式人生 > >Spring Boot下基於Profile動態替換配置資訊

Spring Boot下基於Profile動態替換配置資訊

引言: 在SpringBoot對程式開發做了大量的簡化和約定,本文將基於Spring Boot來展示如何進行profile的切換以及部署中基於profile中進行配置資訊的動態替換。

1.  基於環境

   Spring Boot 1.4.1 Release,  STS,  JDK 1.8

2.  建立Spring Boot專案

    開啟STS 3.8.2, STS是Spring官方的開發工具。  開啟File --> New--> Spring Starter Project,開啟如下介面:

    

    設定專案名稱,目錄位置,groupId,artifactId等資訊,點選Next,

   

    選取依賴包,這裡主要是使用了Spring Boot專案提供的工具包;我這裡選用devTool,然後點選Finish完成操作。

     接下來,我們來檢視一下Spring Boot的專案目錄結構:

     

   在STS中,基於Spring Boot的專案會在右上角新增一個S的標識,專案名稱後面新增[boot]標識,這裡使用了Spring Boot提供了devtool輔助工具,故【devtools]也被寫入了專案的名稱之中。

    相對於maven的專案,新增了mvnw.sh和mvnw.cmd兩個檔案,這兩個檔案其實是maven wrapper檔案,那有人就會問了,這兩個檔案有什麼用呀?這裡它的用處也是非常友好的,就是不再假設本地已經按照maven庫; 當本地沒有安裝maven之時,就自動在後臺進行下載,自動安裝maven,然後執行後續的命令和操作,是不是很友好呀?

3.  新增配置資訊

    新增db.xml和test.properties兩個配置檔案資訊, db.xml的資訊如下:

<?xml version="1.0" encoding="UTF-8"?>
<info>@[email protected]</info>
  test.properties的資訊如下:
[email protected]@
  相比於maven中的佔位符,可以發現兩者的佔位符是不一樣的,Spring boot使用@[email protected]來表示,maven使用${key_val}來標識佔位符。
  我們來看一下專案的配置資訊:

  


     這裡可以看到新增config目錄,目錄下有2個配置檔案。 application.properties是系統預設提供的全域性配置資訊。

4. 更新pom.xml檔案內容

   在pom.xml中新增了resources的配置資訊,在profile中新增了filter資訊,具體如下: 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>org.cuckoo.report</groupId>
	<artifactId>brain</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>MavenDemo</name>
	<description>Cuckoo Threat Analysis</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.4.1.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
		
		  <resources>
		   <resource>
		      <directory>src/main/resources</directory>
		      <filtering>true</filtering>
		   </resource>
		</resources>
	</build>

   <profiles>
       <profile>
			<id>test</id>		
			<activation>
				<activeByDefault>true</activeByDefault>
			</activation>
			<properties>
				<test.infos>replacedKey</test.infos>
			</properties>
			<build>
				<filters>
					<filter>src/main/resources/config/db.xml</filter>	
					<filter>src/main/resources/config/test.properties</filter>					 
				</filters>
			</build>
	  </profile>
	</profiles>
</project>
  大家可以發現maven的外掛都是通過spring-boot-maven-plugin來完成相關元件的引入的,無需在額外引入其他相關的plugins了,是不是很簡單?‘

5.  執行部署或者打包

  切換至專案根目錄,在命令列可以執行2組命令,可以執行mvn相關命令,也可以執行mvnw相關的spring-boot命令,關於Spring boot的命令主要有以下幾種:

   訪問地址: http://docs.spring.io/spring-boot/docs/1.4.1.RELEASE/maven-plugin/index.html

   這裡也可以使用mvnw spring-boot:run來啟動應用,從而檢查配置資訊是否被動態的替換。

   mvn的命令仍然與原有的命令一致,這裡使用mvn package來打包測試配置資訊的過濾:

D:\Dev\workspace\MavenDemo>mvn package -Dmaven.test.skip=true
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MavenDemo 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ brain ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 3 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ brain ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to D:\Dev\workspace\MavenDemo\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ bra
[INFO] Not copying test resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ brain --
[INFO] Not compiling test sources
[INFO]
[INFO] --- maven-surefire-plugin:2.18.1:test (default-test) @ brain ---
[INFO] Tests are skipped.
[INFO]
[INFO] --- maven-jar-plugin:2.6:jar (default-jar) @ brain ---
[INFO] Building jar: D:\Dev\workspace\MavenDemo\target\brain-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:1.4.1.RELEASE:repackage (default) @ brain ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.448 s
[INFO] Finished at: 2016-10-17T15:26:19+08:00
[INFO] Final Memory: 25M/208M
[INFO] ------------------------------------------------------------------------
切換至專案根目錄/targe/classes下檢視配置資訊,即可發現佔位符已經被正確替換了。

   然後一切操作完成了。

6.  擴充套件閱讀