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>@test.infos@</info>
  test.properties的信息如下:
add.info=@test.infos@
  相比于maven中的占位符,可以发现两者的占位符是不一样的,Spring boot使用@key_val@来表示,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.  扩展阅读

  大家也可以阅读我的一篇blog,关于基于maven的profile配置信息替换文章: Maven中基于POM.xml的Profile来动态切换配置信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值