《穿越SpringBoot 》 第三章-SpringBoot 配置詳解 | 第1節- SpringBoot Spring Boot 中yaml 配置檔案

CjNB發表於2020-10-16

Spring Boot 中yaml 配置檔案

前提:

藉助:IntelliJ IDEAMaven構建工具,以及基於SpringBoot 2.3.4
官人如需使用 Maven 請閱讀教程:Maven 構建工具的下載與安裝
官人如需使用 IDEA 請閱讀教程:IntelliJ IDEA

更多幹貨:

請參考Java學習資料:https://www.CJNB自行學習。

定義:

Yaml是什麼?

Yaml是JSON的一個超集,是一種方便的定義層次配置資料的格式,結構層次上清晰明瞭,配置簡單易讀、易用。要想使用YAML作為屬性配置檔案,需要將SnakeYAML庫新增到classpath下,Spring Boot對SnakeYAML庫也做了整合,例如使用spring-boot-starter-web或spring-boot-starter都會自動新增SnakeYAML庫到classpath下。

要求:

1.字尾名 .yml .yaml
2.用縮排來表示層級關係:且縮排必須使用空格,不能使用tab鍵。
3.他是區分大小寫的。
下面將進行簡單的application.yml配置檔案的屬性配置,睜大眼看清楚哦。
為了讓SpringBoot更好的生成資料,我們需要新增如下spring-boot-configuration-processor依賴,該依賴只會在編譯時呼叫,所以不用擔心會對生產造成影響
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

檔案application.yml的配置:

application.yml配置檔案中可以定義很多東西。

物件、map

寫法:key: value (注意:冒號後的空格不能省略)如下圖程式碼。
#介值對
com:
  example:
    boot:
      map:
        aaa: 123
        bbb: 456
        ccc: 789
#行內寫法
      map: {aaa: 123,bbb: 456,ccc: 789}

在這裡插入圖片描述

陣列、集合

寫法:用 - 來定義元素
#方式一:
com:
  example:
    boot:
      arr:
        - 1
        - 2
        - 3
      list:
        - a
        - b
        - c
      set:
        - true
        - false      
#方式二:行內的寫法
       arr: [1,2,3]
       list: [a,b,c]
       set: [true,false,true]

屬性名

當Java屬性名是駝峰形式,比如:lastName
com:
  example:
    boot:
      # 關於屬性名有三種寫法
      lastName:  hello  yml1
      last-name: hello  yml2
      last_name: hello  yam3

佔位符

${} 可以引用其他配置 ,不支援行內寫法
server:
   port: 8080
com:
  example:
    boot:
      arr:
        - 1
        - ${server.port}
        - 3

在這裡插入圖片描述

字串

1.可以直接寫
2.可以用單引號括起來1,2的效果一樣,都是會把特殊字元當成普通的字串來看待,不會處理。
3用雙引號括起來:適用於裡面有特殊字元,比如 \n
com:
  example:
    boot:
      # 關於屬性名有三種寫法
      #1.
      lastName:  hello \n yml1
      #2.
      last-name: 'hello \n yml2'
      #3.
      last_name: "hello \n yam3"

profile的支援

單檔案多環境配置:

在這裡插入圖片描述

多環境配置:

在真實的應用中,常常會有多個環境(如:開發,測試,生產等),不同的環境資料庫連線都不一樣,這個時候就需要用到spring.profile.active的強大功能了,它的格式為application-{profile}.properties,這裡的application為字首不能改,{profile}是我們自己定義的。
下圖為總application.yml檔案

在這裡插入圖片描述

如下圖建立application-dev.properties、application-prod.properties分配置檔案

在這裡插入圖片描述

外部配置的優先載入,優先順序更高如下圖對比可知:

內部application.yml檔案:

在這裡插入圖片描述

外部application.yml檔案 :
我們對已經開發完成的程式碼打包釋出,期間在測試環境測試通過了,那麼即可釋出上生產,這個時候是修改application.properties的配置是很不方便的。那麼需要我們建立如下的外部檔案 ,然後cmd命令執行即可。

在這裡插入圖片描述
在這裡插入圖片描述

配置檔案存放位置

在這裡插入圖片描述

編寫XxxProperties config配置物件類

演示:用自己的物件接收application.yml 配置檔案(即給物件注入值)這裡的物件是一個map
類裡定義了一個map、list、set、arr、模擬定義了lastName駝峰命名,利用lombok生成其get、set方法。
lombok用法:匯入lombok,參考文末pom依賴;使用@Data註解即可

在這裡插入圖片描述

package com.example.boot.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Data//利用 lombok外掛自動生成 get、set方法
@ConfigurationProperties(prefix ="com.example.boot")//prefix 指定一個字首
public class XxxProperties {
    //用一個map來接收,必須要有getter setter方法。
    private Map<String,Object> map;

    private Integer [] arr;
    private List<String> list;
    private Set<Boolean> set;
    private String lastName;
}

編寫BootApplication啟動類

在這裡插入圖片描述

package com.example.boot;

import com.example.boot.config.XxxProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import java.util.Arrays;

@EnableConfigurationProperties(XxxProperties.class )//將XxxProperties類 註冊進去 宣告為bean。
@SpringBootApplication
public class BootApplication implements ApplicationRunner {

	public static void main(String[] args) {
		SpringApplication.run(BootApplication.class, args);
	}
	
	//注入 XxxProperties類
	@Autowired
	private XxxProperties properties;

	//1.實現 ApplicationRunner介面 生成 run方法進行測試。(在程式啟動後會回撥執行)
	//2.在單元測試類中進行測試
	@Override
	public void run(ApplicationArguments args) throws Exception {
		System.out.println(properties.getMap());
		System.out.println(Arrays.asList(properties.getArr()));
		System.out.println(properties.getList());
		System.out.println(properties.getSet());
		System.out.println(properties.getLastName());
	}
}

擴充profile的支援

application.properties檔案的配置

1.配置profile
在這裡插入圖片描述
在這裡插入圖片描述
2.啟用profile
方法一:通過主配置檔案啟用,如下圖
在這裡插入圖片描述
方法二:右鍵進入edit configuration
在這裡插入圖片描述
在這裡插入圖片描述
其他場景:同時執行兩個環境
在這裡插入圖片描述

application.properties比application.yml優先順序高

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

測試:

1.在mawen環境下打包。
2.然後進入到專案目錄(即你的原始碼中target目錄),此處以我本地目錄為主:/Users/Documents/springboot-learning-experience/spring-boot-config
3.然後開啟 cmd 程式,輸入:java -jar spring-boot-config-0.0.1-SNAPSHOT.jar 回車即可
4.最後檢視控制檯輸出即可

pom.xml:依賴

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.4.RELEASE</version>
		<relativePath/>
	</parent>
	<groupId>com.example</groupId>
	<artifactId>1010</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>boot</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
<!--	web  	-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
<!--	configuration-processor	-->

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>
<!--	lombok	-->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
<!--	test	-->
		<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>
	</dependencies>

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

</project>

總結:

待完善…
本教程基於最新的spring-boot-starter-parent:2.3.4RELEASE編寫,目前很多大佬都寫過關於SpringBoot的教程了,如有雷同,請多多包涵.

相關文章