Spring Boot 提供了大量的自動配置,極大地簡化了spring 應用的開發過程,當使用者建立了一個 Spring Boot 項目後,即使不進行任何配置,該項目也能順利的運作起來。也可以根據自身的需要使用配置檔案修改 Spring Boot 的預設設定。
SpringBoot 預設使用以下 2 種全局的配置檔案,其檔案名是固定的。
- application.properties
- application.yml
application.properties與 application.yaml都可以作為Spring Boot的配置檔案,隻是書寫格式不同而已,在 Spring Boot 啟動時被自動讀取。當然也可以同時使用,但同級目錄下讀取的順序是先讀取application.properties在讀取application.yaml。該配置檔案的存放路徑如下圖所示。
一、application.properties的文法及使用
1.1.Properties 文法
- 使用properties的key=value形式
- 使用層級遞進關系。
- 從最高層到最低層逐個低級,中間使用點"."間隔
server.port=8090 #設定Tomcat端口
spring.datasource.driver-class-name=com.mysql.jdbc.Driver #資料驅動
spring.datasource.url=jdbc:mysql://localhost:3306/cqyddx?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=test
spring.datasource.password=123456
1.2.Properties常用寫法
properties支援以下三種資料結構:
- 對象:鍵值對的集合
- 數組:一組按次序排列的值
- 字面量:單個的、不可拆分的值
1.3.properties字面量寫法
字面量是指單個的,不可拆分的值,例如:數字、字元串、布爾值、以及日期:date、boolean、string、number、null等。
user.username=hello vipe
user.age=28
user.birth=2022/11/02 13:14:15
1.4.properties對象寫法
在 properties中,對象可能包含多個屬性,每一個屬性都是一對鍵值對。properties 為對象提供了 以下寫法:
user.username="vipe"
user.age=28
1.5.properties 數組、List、Map、Set 行内寫法
#數組行内寫法
user.hobby=basketball,football,volleyball
#list集合行内寫法
user.booksname.chinese=java,python,go
#map的行内寫法
user.books={key1=spring, key2=springmvc, key3=springboot, key4=springcloud}
#set的行内寫法
user.salary=33,27,43
1.6.properties 數組、List、Map、Set 非行内寫法 及 複合結構寫法
#數組寫法 使用[x]表示數組中的元素,寫法如下:
user.hobby[0]=basketball
user.hobby[1]=football
user.hobby[2]=volleyball
#list集合寫法 使用[x]表示集合中的元素,寫法如下:
user.booksname[0]=java
user.booksname[1]=python
user.booksname[2]=go
##map集合的key value 使用key表示map中的key,寫法如下:
user.books.key1=spring
user.books.key2=springmvc
user.books.key3=springboot
user.books.key4=springcloud
#map集合的value是map形式 表示在books集合中使用chinese做為鍵,值是一個map集合,值為map集合以chinese[0]作為鍵
user.books.chinese[0]=Darkness
user.books.chinese[1]=Gorgeous
user.books.chinese[2]=Night
#map集合的value是map形式 使用chinese.xxx表示map中的key為sm值為Smile,寫法如下:
user.books.chinese.sm=Smile
user.books.chinese.fuf=Fury
user.books.chinese.tn=Tender
#set集合以下标方式指派 使用[x]表示集合中的元素,寫法如下:
user.salary[0]=64
user.salary[1]=37
user.salary[2]=58
#複合結構寫法 使用遞進表示對象與屬性的層級關系
user.book.bookName=C++
user.book.bookPrice=52
1.7.測試
1.7.1.需要添加lombok依賴
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
1.7.2.準備user和book類
package com.augus.dao;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Data
@AllArgsConstructor
@Component
@ConfigurationProperties(prefix = "user")
public class User {
private String username;
private Integer age;
private Book book;
private Date birth;
private String[] hobby;
private List<String> booksName;
private Map<String, Object> books;
private Set<Double> salary;
public User() {
System.out.println("建立user bean");
}
}
package com.augus.dao;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.stereotype.Component;
@Data
@AllArgsConstructor
@Component
public class Book {
private String bookName;
private Double bookPrice;
public Book(){
System.out.println("建立book bean");
}
}
1.7.3.在啟動類中編寫如下代碼
package com.augus;
import com.augus.dao.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
@SpringBootApplication
public class Springboot03Application {
public static void main(String[] args) {
//傳回IOC容器
ConfigurableApplicationContext run = SpringApplication.run(Springboot03Application.class, args);
User user = run.getBean("user", User.class);
System.out.println(user.getUsername());
System.out.println(user);
}
}
啟動執行之後結果如下:
二、application.yml的文法及使用
application.yml 是一種使用 YAML 語言編寫的檔案,它與 application.properties 一樣,可以在 Spring Boot 啟動時被自動讀取,修改 Spring Boot 自動配置的預設值。
2.1.YAML 簡介
YAML 全稱 YAML Ain't Markup Language,它是一種以資料為中心的标記語言,比 XML 和 JSON 更适合作為配置檔案。
想要使用 YAML 作為屬性配置檔案(以 .yml 或 .yaml 結尾),需要将 SnakeYAML 庫添加到 classpath 下,Spring Boot 中的 spring-boot-starter-web 或 spring-boot-starter 都對 SnakeYAML 庫做了內建, 隻要項目中引用了這兩個 Starter 中的任何一個,Spring Boot 會自動添加 SnakeYAML 庫到 classpath 下。
下面是一個簡單的 application.yml 屬性配置檔案。
2.2.YAML 文法
YAML 的文法如下:
- 使用縮進表示層級關系。
- 縮進時不允許使用 Tab 鍵,隻允許使用空格。
- 縮進的空格數不重要,但同級元素必須左側對齊。
- 大小寫敏感。
例如:
server:
port: 8090
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
username: test
password: 123456
url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
2.3.YAML 字面量寫法
字面量是指單個的,不可拆分的值,例如:數字、字元串、布爾值、以及日期等。
在 YAML 中,使用“key:[空格]value”的形式表示一對鍵值對(空格不能省略),如 url: www.baidu.com。
字面量直接寫在鍵值對的“value”中即可,且預設情況下字元串是不需要使用單引号或雙引号的。
name: zhangsan
若字元串使用單引号,則會轉義特殊字元。
name: zhangsan \n lisi
輸出結果為:
zhangsan \n lisi
若字元串使用雙引号,則不會轉義特殊字元,特殊字元會輸出為其本身想表達的含義
name: zhangsan \n lisi
輸出結果為:
- zhangsan
- lisi
2.4.YAML 對象、數組、List、Map、Set的行内寫法與縮進寫法
在 YAML 中,對象可能包含多個屬性,每一個屬性都是一對鍵值對。
YAML 為對象提供了 2 種寫法:縮進式寫法、行内式寫法,但注意,無論是縮進寫法還是行内寫法,冒号後都必須有一個空格。
2.4.1.行内寫法
# user對象 行内寫法:注意冒号後空格
user: {
username: vipe is good,
age: 27,
birth: 2022/11/02 12:13:14,
# book對象 行内寫法:注意冒号後空格
book: {bookName: springboot , bookPrice:102},
# 數組 行内寫法:注意冒号後空格
hobby: [basketball,football,volleyball],
# List 行内寫法:注意冒号後空格
booksname: [java,python,go],
# Map 行内寫法:注意冒号後空格
books: {key1: spring, key2: springmvc, key3: springboot, key4: springcloud,
chinese: {0: Darkness, 1: Gorgeous, 2: Night, sm: Smile, fuf: Fury, tn: Tender}},
# Set 行内寫法:注意冒号後空格
salary: [64, 37, 58]
}
2.4.2.縮進寫法
# user對象 縮進寫法:注意冒号後空格
user:
username: 'vipe is good'
age: 27
birth: 2022/11/02 12:13:14
# book對象 縮進寫法
book:
bookName: springboot
bookPrice: 102
# 數組 行内寫法:注意冒号後空格
hobby:
- basketball
- football
- volleyball
# List 行内寫法:注意冒号後空格
booksname:
- java
- python
- go
# Map 行内寫法:注意冒号後空格
books:
key1: spring
key2: springmvc
key3: springboot
key4: springcloud
chinese:
0: Darkness
1: Gorgeous
2: Night
sm: Smile
fuf: Fury
tn: Tender
# Set 行内寫法:注意冒号後空格
salary:
- 64
- 37
- 58