Spring Boot從零入門7_最新配置文件配置及優(yōu)先級(jí)詳細(xì)介紹

本文屬于原創(chuàng),轉(zhuǎn)載注明出處,歡迎關(guān)注微信小程序小白AI博客 微信公眾號(hào)小白AI或者網(wǎng)站 https://xiaobaiai.net 或者我的CSDN http://blog.csdn.net/freeape

[TOC]

0 前言

進(jìn)入實(shí)際項(xiàng)目開發(fā)中,我們不僅僅是靠著默認(rèn)的全局配置文件application.properties來配置我們的項(xiàng)目了事扭,Spring Boot中的配置文件也有不少需要注意的地方,掌握后,可以方便的讓我們在做項(xiàng)目中游刃于各種配置了焚鲜,讓配置一目了然,層次清楚放前,模塊清晰恃泪,寫成總結(jié),另外方便以后參考查閱犀斋。該文章的內(nèi)容是最新的配置文件介紹內(nèi)容贝乎,全部參考最新的官方文檔所寫,截至2019年11月21日叽粹,此時(shí)Spring是5.2.1版本览效,Spring Boot是2.2.1版本。

1 我們需要了解

Spring Boot提供了一個(gè)spring-boot-devtoolsjar包虫几,提供了一些方便程序開發(fā)的功能锤灿,主要是監(jiān)控程序的變化,然后進(jìn)行自動(dòng)重新啟動(dòng)辆脸。使用spring-boot-devtools需要在pom.xml中添加依賴項(xiàng)但校,同時(shí)需要設(shè)置<optional>true</optional>spring-boot-devtools默認(rèn)將只在開發(fā)環(huán)境生效啡氢,通過Spring Boot插件打包時(shí)默認(rèn)是不會(huì)包含spring-boot-devtools状囱。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

2 簡介和全局概述

創(chuàng)建一個(gè)Spring Boot項(xiàng)目后,會(huì)在src/main/resources目錄下默認(rèn)生成一個(gè)全局配置文件application.properties倘是,不過里面啥內(nèi)容也沒有亭枷。Spring Boot已經(jīng)將所有默認(rèn)配置參數(shù)都自動(dòng)配置好了(https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html),如果我們在外部配置文件中修改配置搀崭,則默認(rèn)配置參數(shù)就會(huì)被修改(Externalized Configuration叨粘,配置外部化),配置外部化的方式有好幾種瘤睹,可以使用屬性文件(properties file)升敲、YAML文件、環(huán)境變量和命令行參數(shù)將配置外部化轰传,下面內(nèi)容會(huì)詳細(xì)介紹驴党。

比如配置文件可以是application.properties或者是application.yml,都可以配置绸吸,只是里面的配置語法不一樣而已鼻弧,yml格式層次相比properties格式要分明些设江。

.properties寫法:

server.port = 9090
spring.application.name = demoservice

.yml寫法:

spring:
    application:
        name: demoservice
   server:
port: 9090

注意:yml格式中一定不要用制表符tab,冒號(hào)和值之間一定要有空格。

Spring Boot對參數(shù)的重寫(覆蓋)有一個(gè)順序攘轩,這是我們需要注意的叉存,這里概況如下:

  1. 當(dāng)使用了Devtools時(shí),$HOME/.config/spring-boot文件夾中的Devtools全局設(shè)置屬性
  2. @TestPropertySource針對對測試的注解
  3. 測試的properties度帮。在@SpringBootTest和測試注釋中提供歼捏,用于測試應(yīng)用程序的特定部分
  4. 命令行參數(shù)
  5. 來自SPRING_APPLICATION_JSON(內(nèi)嵌在環(huán)境變量或系統(tǒng)屬性中的JSON)的屬性
  6. ServletConfig初始化參數(shù)
  7. ServletContext初始化參數(shù)
  8. JNDI屬性:java:comp/env
  9. Java系統(tǒng)屬性: System.getProperties()
  10. 操作系統(tǒng)環(huán)境變量
  11. RandomValuePropertySource,其屬性僅在random.*
  12. 打包jar之外的特定于概要文件的應(yīng)用程序?qū)傩裕ㄈ?code>application-{profile}.properties和對應(yīng)的YAML變量)
  13. 打包在jar中的特定于概要文件的應(yīng)用程序?qū)傩裕ㄈ?code>application-{profile}.properties和YAML變量)
  14. 打包jar之外的應(yīng)用程序?qū)傩裕?code>application.properties和YAML變量)
  15. 打包在jar中的應(yīng)用程序?qū)傩裕?code>application.properties和YAML變量)
  16. @Configuration類上的@PropertySource注解
  17. 默認(rèn)屬性(通過設(shè)置SpringApplication.setDefaultProperties指定)

舉一個(gè)具體的例子來說明上述的順序是如何生效的:

import org.springframework.stereotype.*;
import org.springframework.beans.factory.annotation.*;

@Component
public class MyBean {

    @Value("${name}")
    private String name;

    // ...
}

比如在應(yīng)用程序類路徑(例如笨篷,打包在jar內(nèi))上瞳秽,可以有一個(gè)application.properties文件,該文件為name屬性設(shè)置了默認(rèn)屬性值率翅。在新環(huán)境中運(yùn)行時(shí)练俐,可以在jar外部提供application.properties文件,該文件覆蓋會(huì)覆蓋在jar內(nèi)application.properties冕臭。又如對于一次性測試腺晾,可以使用特定的命令行開關(guān)啟動(dòng)(例如,java -jar app.jar --name="Spring")也可以覆蓋name屬性值辜贵。又如可以JSON格式環(huán)境變量$ java -Dspring.application.json='{"name":"test"}' -jar myapp.jar來覆蓋悯蝉。其他方式就不一一舉例了。

3 配置參數(shù)

3.1 參數(shù)設(shè)置及加載目錄的順序及作用優(yōu)先級(jí)

參數(shù)設(shè)置有兩種方式語法托慨,一個(gè)properties鼻由,一個(gè)是ymlSpringApplicationapplication.properties文件加載以下位置的屬性厚棵,并將它們添加到Spring環(huán)境中蕉世。

  1. 當(dāng)前項(xiàng)目目錄的config子目錄
  2. 當(dāng)前項(xiàng)目根目錄
  3. classpath設(shè)定目錄下的config子目錄
  4. classpath設(shè)定目錄下

上述列表按優(yōu)先級(jí)排序(在列表中較高位置定義的屬性將覆蓋在較低位置定義的屬性,如1中設(shè)置的屬性值將覆蓋2中同屬性的屬性值)窟感。

注意:用maven構(gòu)建項(xiàng)目時(shí)讨彼,src/main/resources目錄就是默認(rèn)的classpath

另外這里說下yml的注意點(diǎn)和特殊用法歉井。

  • yml格式中一定不要用制表符tab,冒號(hào)和值之間一定要有空格 一定要有空格 一定要有空格
  • yml的雙引號(hào)不會(huì)轉(zhuǎn)義字符串里面的特殊字符柿祈,特殊字符按本身功能輸出,比如
  • yml的單引號(hào)會(huì)轉(zhuǎn)義字符串里面的特殊字符哩至,輸出原來的字符
# 下面會(huì)輸出得到hello換行xiaobaiai.net
name: "hello\nxiaobaiai.net"
# 下面會(huì)輸出得到hello\nxiaobaiai.net
name: 'hello\nxiaobaiai.net'
  • yml支持對象躏嚎、數(shù)組、純量(字符串菩貌、布爾值true/false卢佣、整數(shù)、浮點(diǎn)數(shù)箭阶、null虚茶、時(shí)間戈鲁、日期new Date('1976-07-31'))
# 對象行內(nèi)寫法
students: { name: Steve, age: 22 }
# 數(shù)組行內(nèi)寫法
animal: [Cat, Dog]
# 或者數(shù)組非行內(nèi)寫法
animal:
    - Cat
    - Dog

3.2 生成配置參數(shù)隨機(jī)值

生成配置參數(shù)隨機(jī)值在測試或者某些場景下是非常有用的。

如我們配置:

#random int
app.location-x=${random.int}
app.location-y=${random.int}

#random int with max
app.user-age=${random.int(100)}

#random int range
app.max-users=${random.int[1,10000]}

#random long with max
app.refresh-rate-milli=${random.long(1000000)}

#random long range
app.initial-delay-milli=${random.long[100,90000000000000000]}

#random 32 bytes
app.user-password=${random.value}

#random uuid. Uses java.util.UUID.randomUUID()
app.instance-id=${random.uuid}

最后輸出:locationX=-449689812, locationY=-2048116572, userAge=88, maxUsers=8927, refreshRateMilli=418859, initialDelayMilli=12542150790115755, userPassword=95ea8b43fd16dc26aad0030c1340e723, instanceId=bd252902-54e9-47b3-bebf-a81b1300ff69

3.3 參數(shù)間引用(占位符)

在配置參數(shù)中可以通過占位符來實(shí)現(xiàn)引用之前定義的參數(shù)值嘹叫,如:

app.name=MyApp
app.description=${app.name} is a Spring Boot application

有些人喜歡(例如)使用--port=9000而不是--server.port=9000在命令行上設(shè)置配置屬性婆殿。可以通過在application.properties中使用占位符來啟用此行為:

server.port=${port:8080}

注意:如果繼承自spring-boot-starter-parentPOM罩扇,則maven資源插件的默認(rèn)篩選標(biāo)記已從${*}更改為@(即婆芦,@maven.token@而不是${maven.token}),以防止與spring樣式占位符沖突喂饥。如果直接為application.properties啟用了Maven篩選消约,則可能還需要將默認(rèn)篩選標(biāo)記更改為其他分隔符,而不是@员帮。

3.4 自定義配置文件

3.4.1 方式一

如果不喜歡將application.properties作為配置文件名或粮,可以通過指定spring.config.name環(huán)境屬性切換到另一個(gè)文件名。還可以使用spring.config.location環(huán)境屬性(目錄位置或文件路徑的逗號(hào)分隔列表)指定配置文件位置捞高。以下示例演示如何指定其他文件名:

$ java -jar myproject.jar --spring.config.name=myConfig

下面的示例演示如何指定兩個(gè)位置:

$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

如果spring.config.location包含目錄(而不是文件)被啼,則需要以/結(jié)尾,并且棠枉,運(yùn)行的時(shí)候浓体,在加載配置之前,應(yīng)該附加從spring.config.name配置的名稱或者默認(rèn)配置名稱辈讶。默認(rèn)不配置spring.config.location則搜索配置文件順序?yàn)椋?/p>

file:./config/
file:./
classpath:/config/
classpath:/

使用時(shí)配置自定義配置位置時(shí)spring.config.location命浴,它們會(huì)替換默認(rèn)位置。例如贱除,如果spring.config.location配置了值classpath:/custom-config/,file:./custom-config/生闲,則搜索順序?qū)⒆優(yōu)椋?/p>

file:./custom-config/
classpath:custom-config/

當(dāng)使用配置自定義配置位置時(shí)spring.config.additional-location,除了額外配置路徑外月幌,還會(huì)使用默認(rèn)位置碍讯。在默認(rèn)位置之前搜索其他位置。

注意:在編程環(huán)境中扯躺,直接去application.properties中設(shè)置spring.config.name是無法生效的捉兴,只有在命令行或者設(shè)置環(huán)境變量export SPRING_CONFIG_NAME=myConfig,或則在代碼中去手動(dòng)編碼導(dǎo)入指定路徑中的配置文件录语。

3.4.2 方式二

直接通過編碼加載指定配置文件去實(shí)現(xiàn)倍啥,這種方式其實(shí)跟后面小節(jié)講到的自定義屬性是相通的,只多了一個(gè)指定文件名的注解澎埠,更詳細(xì)的可以看后面操作虽缕。比如我們創(chuàng)建test.properties,路徑跟也放在src/main/resources下面:

my.app.name=hello
my.app.func=test

然后新建一個(gè)參數(shù)Bean:

@Configuration
@ConfigurationProperties(prefix="my.app") 
@PropertySource("classpath:test.properties")
public class ConfigTestBean {
    private String name;
    private String func;
    // 省略getter和setter
}

這樣就Ok了蒲稳,怎么是驗(yàn)證可以看自定義配置參數(shù)小節(jié)氮趋。

3.5 命令行配置參數(shù)

默認(rèn)情況下伍派,SpringApplication將任何命令行選項(xiàng)參數(shù)(即以--開頭的參數(shù),例如--server.port=9000)轉(zhuǎn)換為屬性剩胁,并將它們添加到Spring環(huán)境中拙已。如前所述,命令行屬性順序排在第四摧冀,始終優(yōu)先于其下面屬性源倍踪。

如果不希望命令行屬性添加到Spring環(huán)境中,可以在程序中使用SpringApplication.setAddCommandLineProperties(false)禁用它們索昂。

3.6 特定于配置文件的屬性(激活profile)

除了application.properties文件外建车,還可以使用以下命名約定定義特定于配置文件的屬性:application-{profile}.properties。環(huán)境有一組默認(rèn)配置文件(默認(rèn)情況下profile為default椒惨,即application-default.properties)缤至,如果未設(shè)置活動(dòng)配置文件,則使用默認(rèn)的application-default.properties文件康谆,加載順序和優(yōu)先級(jí)還是與application.properties一樣的领斥。Spring可使用Profile決定程序在不同環(huán)境下執(zhí)行情況,包含配置沃暗、加載Bean月洛、依賴等,Spring的Profile一般項(xiàng)目包含:dev(開發(fā)), test(單元測試), qa(集成測試), prod(生產(chǎn)環(huán)境)孽锥。同樣地嚼黔,Maven也有Profile配置,可在構(gòu)建過程中針對不同的Profile環(huán)境執(zhí)行不同的操作惜辑,包含配置唬涧、依賴、行為等盛撑,每個(gè)Profile中可設(shè)置:id(唯一標(biāo)識(shí)), properties(配置屬性), activation(自動(dòng)觸發(fā)的邏輯條件), dependencies(依賴)等碎节。

說到這里,如何激活profile呢抵卫?下面介紹三種方式狮荔。

注意:application-{profile}.properties的重寫優(yōu)先級(jí)是要高于application.properties的,這個(gè)跟配置文件加載順序沒有關(guān)系陌僵。另外創(chuàng)建application-{profile}.yml文件跟properties是一樣的轴合。

3.6.1 方式一

在配置文件中設(shè)置,這種方式不靈活碗短,實(shí)際開發(fā)中不不太會(huì)用到

spring.profiles.active=test

3.6.2 方式二

使用占位符,在打包時(shí)替換题涨,以Maven為例

第一步在properties中添加(package.target是自定義的參數(shù)):

spring.profiles.active=@package.target@

第二步在pom.xml中增加不同環(huán)境打包的配置:

<!-- 與Maven build標(biāo)記并列 -->
<profiles>
    <!-- 開發(fā)環(huán)境 -->
    <profile>
        <id>dev</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <package.target>dev</package.target>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </dependency>
            <dependency>
                <groupId>org.apache.tomcat</groupId>
                <artifactId>tomcat-jdbc</artifactId>
            </dependency>
        </dependencies>
    </profile>
    <!-- 生產(chǎn)環(huán)境 -->
    <profile>
        <id>prod</id>
        <properties>
            <package.target>prod</package.target>
        </properties>
    </profile>
</profiles>

從上面的配置可以看出偎谁,Maven的Profile配置了兩個(gè):dev和prod总滩,并且在dev中使用了內(nèi)嵌Tomcat,而 prod 中沒有(這種配置場景如生產(chǎn)環(huán)境下使用外部Tomcat巡雨,開發(fā)時(shí)使用內(nèi)部Tomcat)闰渔。

第三步再添加資源過濾實(shí)現(xiàn)在構(gòu)建時(shí)修改以“@xxx@”表示的屬性,利用Maven的resources插件:

...

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
</plugins>

<!-- Maven build標(biāo)記內(nèi) -->
<resources>
    <!-- 不加該resource也可以 -->
    <resource>
        <directory>src/main/resources</directory>
        <excludes>
            <!-- 排除掉src/main/resources下的所有application*.properties文件 -->
            <exclude>application*.properties</exclude>
        </excludes>
    </resource>
    <resource>
        <!-- 指定要處理的資源目錄 -->
        <directory>src/main/resources</directory>
        <!-- 是否替換@xx@表示的maven properties屬性值 -->
        <filtering>true</filtering>
        <includes>
            <!-- 將文件內(nèi)容的“@xx@”替換為相應(yīng)的變量铐望,即package.target -->
            <include>application-${package.target}.properties</include>
        </includes>
    </resource>
</resources>

第四步就是編譯打包了:

# 根據(jù)Maven Profile的 dev 構(gòu)建環(huán)境包
$ mvn clean package -Dmaven.test.skip=true -Pdev

3.6.3 方式三

通過設(shè)置系統(tǒng)環(huán)境變量:

export SPRING_PROFILES_ACTIVE=dev

3.6.4 其他方式

Java命令行設(shè)定方式:

# 方式一
$ java -jar app.jar --spring.profiles.active=dev
# 方式二
$ java -jar -Dspring.profiles.active=dev demo-0.0.1-SNAPSHOT.jar

注解方式(@ActiveProfiles是Spring Boot的Test starter提供的注解冈涧,在單元測試中就比較有用了,只能在/src/test/java中使用):

@ActiveProfiles("dev")

3.6.5 YML特殊方式

YAML文件實(shí)際上可以是由---行分隔的一系列文檔正蛙,每個(gè)文檔被分別解析為一個(gè)展開的配置映射督弓。然后激活dev還是production的方式同樣的也有指定環(huán)境變量或者命令行方式之類的。

# 通用屬性
server:
    port: 9000
---
# dev環(huán)境下配置
spring:
    profiles: dev
server:
    port: 9001

---
# production生產(chǎn)環(huán)境下配置
spring:
    profiles: production
server:
    port: 0

3.7 自定義屬性

Spring已經(jīng)為我們提供很多的默認(rèn)參數(shù)乒验,不過我們也可以創(chuàng)建自己的配置參數(shù)愚隧。比如我們在application.properties中創(chuàng)建下面的自定義屬性:

#random int
app.location-x=${random.int}
app.location-y=${random.int}

#random int with max
app.user-age=${random.int(100)}

#random int range
app.max-users=${random.int[1,10000]}

#random long with max
app.refresh-rate-milli=${random.long(1000000)}

#random long range
app.initial-delay-milli=${random.long[100,90000000000000000]}

#random 32 bytes
app.user-password=${random.value}

#random uuid. Uses java.util.UUID.randomUUID()
app.instance-id=${random.uuid}

然后創(chuàng)建對應(yīng)的Java參數(shù)組件MyAppProperties.java

@Component
@ConfigurationProperties("app")
    public class MyAppProperties {
    private int locationX;
    private int locationY;
    private int userAge;
    private int maxUsers;
    private long refreshRateMilli;
    private long initialDelayMilli;
    private String userPassword;
    private UUID instanceId;
    
    public int getLocationX() {
        return locationX;
    }
    public void setLocationX(int locationX) {
        this.locationX = locationX;
    }
    public int getLocationY() {
        return locationY;
    }
    public void setLocationY(int locationY) {
        this.locationY = locationY;
    }
    public int getUserAge() {
        return userAge;
    }
    public void setUserAge(int userAge) {
        this.userAge = userAge;
    }
    public int getMaxUsers() {
        return maxUsers;
    }
    public void setMaxUsers(int maxUsers) {
        this.maxUsers = maxUsers;
    }
    public long getRefreshRateMilli() {
        return refreshRateMilli;
    }
    public void setRefreshRateMilli(long refreshRateMilli) {
        this.refreshRateMilli = refreshRateMilli;
    }
    public long getInitialDelayMilli() {
        return initialDelayMilli;
    }
    public void setInitialDelayMilli(long initialDelayMilli) {
        this.initialDelayMilli = initialDelayMilli;
    }
    public String getUserPassword() {
        return userPassword;
    }
    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }
    public UUID getInstanceId() {
        return instanceId;
    }
    public void setInstanceId(UUID instanceId) {
        this.instanceId = instanceId;
    }
    
    @Override
    public String toString() {
        return "MyAppProperties [locationX=" + locationX + ", locationY=" + locationY + ", userAge=" + userAge
                + ", maxUsers=" + maxUsers + ", refreshRateMilli=" + refreshRateMilli + ", initialDelayMilli="
                + initialDelayMilli + ", userPassword=" + userPassword + ", instanceId=" + instanceId + "]";
    }
}

@ConfigurationProperties 注解向Spring Boot聲明該類中的所有屬性和配置文件中相關(guān)的配置進(jìn)行綁定。prefix = "app"prefix=可省略) : 聲明配置前綴锻全,將該前綴下的所有屬性進(jìn)行映射狂塘。@Component 或者@Configuration:將該組件加入Spring Boot容器,只有這個(gè)組件是容器中的組件鳄厌,配置才生效荞胡。

提示:也可以通過 @Value("${key}") 讀取配置文件中的屬性,key = properties文件等號(hào)左邊的key部分了嚎。在我們定義的 Java 參數(shù)組件中硝训,還可以對具體的參數(shù)進(jìn)行注解斷言,如@Email加到郵件的變量上新思,則如果注入的不是一個(gè)合法的郵件地址則會(huì)拋出異常窖梁。這類注解還有@AssertFalse 校驗(yàn)false、@AssertTrue 校驗(yàn)true夹囚、@DecimalMax(value=10,inclusive=true) 小于等于10纵刘,inclusive=true,是小于等于荸哟、@DecimalMin(value=,inclusive=)假哎、@Max(value=) 小于等于value、@Min(value=) 大于等于value鞍历、@Past 檢查日期舵抹、@Pattern(regex=,flag=) 正則、@Validate 對po實(shí)體類進(jìn)行校驗(yàn)等劣砍。

最后還需要加入依賴spring-boot-configuration-processor

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 加入spring-boot-configuration-processor -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

校驗(yàn)我們自定義的配置:

@SpringBootApplication
public class Test07HelloworldApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Test07HelloworldApplication.class, args);
        MyAppProperties bean = context.getBean(MyAppProperties.class);
        System.out.println(bean.toString());
    }
}

// output
// MyAppProperties [locationX=1329054364, locationY=1100464591, userAge=99, maxUsers=8007, refreshRateMilli=733281, initialDelayMilli=54489880705550952, userPassword=76aebd15270f7065adf3d31b5a790829, instanceId=681ed3a4-a561-460c-b826-58229c31b055]

4 總結(jié)

上述的內(nèi)容大部分經(jīng)過實(shí)際Demo驗(yàn)證惧蛹,示例代碼可以在https://github.com/yicm/SpringBootExamples上找到。配置文件這一章細(xì)節(jié)內(nèi)容比較多,但是我們把我?guī)讉€(gè)點(diǎn)就好了香嗓,這個(gè)總結(jié)下:

  • Spring Boot為我們提供了大量的默認(rèn)配置迅腔,我們可以重寫這些配置參數(shù)的值,并提供了多種方式去重寫(覆蓋)靠娱,且重寫方式之間是有優(yōu)先級(jí)的
  • Spring Boot應(yīng)用可以在不同的位置加載配置文件application.properties(yml)沧烈,并且這些位置是有順序、優(yōu)先級(jí)的
  • Spring Boot的參數(shù)之間可以通過占位符引用像云,而且還可以通過占位符實(shí)現(xiàn)命令行參數(shù)名字的簡化
  • Spring Boot可以支持自定義參數(shù)
  • Spring Boot可以支持自定義配置文件名
  • Spring Boot可以支持多配置文件的切換锌雀,通過application-{profile}.properties(yml)激活profile,且有多種方式去激活profile

如果你知道了上述總結(jié)的具體內(nèi)容迅诬,那么這一博文你也差不多都了解了腋逆。

5 參考資料

本文屬于原創(chuàng),轉(zhuǎn)載注明出處百框,歡迎關(guān)注CSDNfreeape或微信小程序小白AI博客 微信公眾號(hào)小白AI或者網(wǎng)站 https://xiaobaiai.net

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末闲礼,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铐维,更是在濱河造成了極大的恐慌柬泽,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫁蛇,死亡現(xiàn)場離奇詭異锨并,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)睬棚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門第煮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人抑党,你說我怎么就攤上這事包警。” “怎么了底靠?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵害晦,是天一觀的道長。 經(jīng)常有香客問我暑中,道長壹瘟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任鳄逾,我火速辦了婚禮稻轨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雕凹。我一直安慰自己殴俱,他們只是感情好政冻,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著粱挡,像睡著了一般赠幕。 火紅的嫁衣襯著肌膚如雪俄精。 梳的紋絲不亂的頭發(fā)上询筏,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機(jī)與錄音竖慧,去河邊找鬼嫌套。 笑死,一個(gè)胖子當(dāng)著我的面吹牛圾旨,可吹牛的內(nèi)容都是我干的踱讨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼砍的,長吁一口氣:“原來是場噩夢啊……” “哼痹筛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起廓鞠,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤帚稠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后床佳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體滋早,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年砌们,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了杆麸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡浪感,死狀恐怖昔头,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情影兽,我是刑警寧澤揭斧,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站赢笨,受9級(jí)特大地震影響未蝌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茧妒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一萧吠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧桐筏,春花似錦纸型、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽除破。三九已至,卻和暖如春琼腔,著一層夾襖步出監(jiān)牢的瞬間瑰枫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工丹莲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留光坝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓甥材,卻偏偏與公主長得像盯另,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子洲赵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容