第三章:SpringBoot配置深刻-5. profile配置

在實際的開發之中,因爲開發(dev)、測試(beta)、運行(product)的環境不一樣,有可能須要選擇不一樣的配置文件,因此在 SpringBoot 裏面充分的考慮到了此類問題,那麼就專門提供有多個 profile 配置,可是對於多 profile 配置必定給要區分出是 yml 還 是 properties,這兩種資源的配置是不一樣的。html

一、 基於 yml 實現 profile 的配置處理:java

· 在使用 yml 配置文件的時候全部可使用的 profile 配置項都要求在一個文件之中編寫;spring

spring:
  profiles:
    active: product
---
spring:
  messages:
    basename: i18n/Messages,i18n/Pages
  profiles: dev
server:
  port: 8080
---
spring:
  messages:
    basename: i18n/Messages,i18n/Pages
  profiles: beta
server:
  port: 9090
---
spring:
  messages:
    basename: i18n/Messages,i18n/Pages
  profiles: product
server:
  port: 80

最初進行 profile 切換的處理能夠經過 maven 的編譯工具動態選擇,可是在 Spring 裏面能夠方便的實現這種切換。apache

二、 此時全部的 thymeleaf 頁面都保存在「src/main/view」目錄之中,並且全部的 SpringBoot 配置文件(*.yml)這個文件也應該都 一塊兒輸出到 jar 文件裏面,那麼就須要配置一個資源的引用,修改「microboot」中的 pom.xml 配置文件:app

<resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.yml</include>
                    <include>**/*.xml</include>
                    <include>**/*.tld</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                    <include>**/*.tld</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/view</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>

完整pommaven

<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>cn.mldn</groupId>
	<artifactId>microboot</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>
	<name>microboot</name>
	<url>http://maven.apache.org</url>
	<properties>
		<jdk.version>1.8</jdk.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-dependencies</artifactId>
				<version>1.5.4.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<build>
		<finalName>microboot</finalName>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>**/*.properties</include>
					<include>**/*.yml</include>
					<include>**/*.xml</include>
					<include>**/*.tld</include>
				</includes>
				<filtering>false</filtering>
			</resource>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.properties</include>
					<include>**/*.xml</include>
					<include>**/*.tld</include>
				</includes>
				<filtering>false</filtering>
			</resource>
			<resource>
				<directory>src/main/view</directory>
				<includes>
					<include>**/*.*</include>
				</includes>
				<filtering>false</filtering>
			</resource>
		</resources>		
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>${jdk.version}</source><!-- 源代碼使用的開發版本 -->
					<target>${jdk.version}</target><!-- 須要生成的目標class文件的編譯版本 -->
					<encode>${project.build.sourceEncoding}</encode>
				</configuration>
			</plugin>
			<plugin>	<!-- 該插件的主要功能是進行項目的打包發佈處理 -->
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>	<!-- 設置程序執行的主類 -->
					<mainClass>cn.mldn.microboot.StartSpringBootMain</mainClass>
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>repackage</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
	<modules>
		<module>microboot-base</module>
		<module>microboot-advance</module>
	</modules>
</project>

三、 隨後能夠將項目進行打包處理,在打包以後也能夠動態切換 profile 配置;spring-boot

· Maven 打包:clean package;工具

· 隨後若是如今要使用默認的 profile 就正常執行:java -jar microboot.jar;測試

 難道之後每一次訪問都須要從新打包嗎?也就是說爲了方便用戶的動態進行 profile 切換(進行從新輸入以前能夠經過ctrl+c切換),能夠在程序執行的時候設置一個 執行的處理參數:java -jar microboot.jar --spring.profiles.active=beta網站

四、 【趣味問題】如今當運行完成以後你會發現程序之中默認採用的圖標是 Spring 的圖標。

可是不少的公司應該去更換爲本身的圖標,因此這個時候能夠單獨準備出一個 ico 配置文件,能夠將這個配置文件拷貝到 「src/main/view/static/images」目錄之中,隨後在頁面之中進行引入:

<link rel="icon" type="image/x-icon" href="/images/study.ico"/>

message_show.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
	<title>SpringBoot模版渲染</title>
	<link rel="icon" type="image/x-icon" href="/images/mldn.ico"/>
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
</head>
<body>
	<p th:text="'官方網站:' + ${url}"/>
	<p th:text="'用戶名:' + ${mid}"/>
</body>
</html>

五、 在進行 profile 配置的時候特別須要注意一點,若是你使用的是 application.properties 配置,這樣的配置處理過程是不同的, 也就是說若是你基於屬性文件完成配置,那麼就須要編寫多個屬性文件內容:

隨後仍是須要有一個公共的 application.properties 配置文件出現,用於指派可使用的 profile 配置:

spring.profiles.active=beta

application.properties

spring.profiles.active=beta

application-beta.properties

spring.messages.basename=i18n/Messages,i18n/Pages
server.port=9090

application-dev.properties

spring.messages.basename=i18n/Messages,i18n/Pages
server.port=8080

application-product.properties

spring.messages.basename=i18n/Messages,i18n/Pages
server.port=80

若是如今將開發程序打成*.jar 文件的話,也一樣能夠在執行的時候使用「--spring.profiles.active=beta」動態指派不一樣的 profile 配置文件。

相關文章
相關標籤/搜索