3.1、環境搭建 3.1.1、在project創建新module 3.1.2、選擇maven 3.1.3、設置module名稱和路徑 3.1.4、module初始狀態 3.1.5、引入springboot父工程 <parent> <groupId>org.springframework.boot</ ...
3.1、環境搭建
3.1.1、在project創建新module
3.1.2、選擇maven
3.1.3、設置module名稱和路徑
3.1.4、module初始狀態
3.1.5、引入springboot父工程
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.18</version>
</parent>
3.1.6、引入啟動器依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3.1.7、創建啟動類
package online.liaojy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author liaojy
* @date 2023/12/18 - 6:24
*/
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class,args);
}
}
3.1.8、創建控制器
package online.liaojy.controller;
import org.springframework.web.bind.annotation.RestController;
/**
* @author liaojy
* @date 2023/12/18 - 7:04
*/
@RestController
public class TestController {
}
3.2、統一配置管理概述
-
在 Spring Boot 工程中,實行統一的配置管理,即所有參數配置都會集中到一個固定位置和命名的文件中;
-
配置文件的固定位置是在 src/main/resources 目錄下,該目錄是 Spring Boot 工程預設的類路徑(classpath);
-
配置文件的命名格式為:application+尾碼+擴展名,擴展名可以是 properties 、yaml 或 yml ;
-
如果 application.properties 和 application.yml(.yaml) 同時存在,則 properties 的優先順序更高。
在 Spring Boot 工程的統一配置文件中,有自定義的參數項,也有固定的參數項,固定的參數項及預設值見 Spring Boot 官方文檔:
https://docs.spring.io/spring-boot/docs/2.7.18/reference/html/application-properties.html
3.3、properties配置文件
3.3.1、創建application.properties配置文件
# application.properties 為統一配置文件,既可以配置固定功能的參數項,也可以配置自定義的參數項
# 固定功能參數項的示例
server.port=8088
server.servlet.context-path=/application
# 自定義參數項的示例
my.name=liaojy
3.3.2、讀取配置文件中的參數值
在統一配置文件中的參數項的值,都可以使用@Value("${鍵}")的方式直接讀取,但一般都是讀取自定義的參數項的值
@Value("${my.name}")
private String name;
@RequestMapping("/readApplication")
public String readApplication(){
return "Hello,"+name+"!";
}
3.3.3、測試效果
3.4、yaml配置文件(瞭解)
3.4.1、yaml概述
-
YAML(YAML Ain’t Markup Language)是一種基於層次結構的數據表示方式;
-
YAML配置文件的擴展名,可以是 yaml ,也可以是 yml ;
-
YAML 配置文件中的鍵和值之間使用冒號 “ : ” 分隔,並使用縮進表示層級關係,可以減少冗餘的內容;
-
相比起 properties 配置文件,YAML 配置文件支持複雜的數據類型,集合類型可以通過減號 “ - ” 來表示。
註意:因為 YAML 配置文件無法搜索完整的參數項名稱,且空格和縮進的格式經常被人詬病,所以本文更推薦使用 properties 配置文件
3.4.2、創建application.yml配置文件
# application.yml 為統一配置文件,既可以配置固定功能的參數項,也可以配置自定義的參數項
# 固定功能參數項的(properties)示例
# server.port=8088
# server.servlet.context-path=/application
# 固定功能參數項的(yml)示例
server:
port: 8088 # 註意冒號 “ : ” 和值之間有一個空格
servlet:
context-path: /application
# 自定義參數項的(properties)示例,properties不支持複雜的數據類型
# my.name=liaojy
# 自定義參數項的(yml)示例
my:
name: liaojy
hobby: # yml支持複雜的數據類型,,集合類型可以通過減號 “ - ” 來表示
- book
- music
- movie
3.4.3、讀取配置文件中的參數值
讀取 YAML 配置文件中參數值的方式,和讀取 properties 配置文件中參數值的方式相同,都是使用@Value("${鍵}")的方式直接讀取;
需要註意的是,使用@Value("${鍵}")的方式,不能讀取集合類型(本例為 my.hobby )的值,
如果希望讀取集合類型的值,則需要使用 @ConfigurationProperties 註解(詳細見3.5節)
@Value("${my.name}")
3.4.4、測試效果
3.5、配置的批量註入
3.5.1、創建組件類
package online.liaojy.pojo;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author liaojy
* @date 2023/12/19 - 7:12
*/
// @Component 註解的作用是將類標識為bean組件,因為只有在ioc容器中才能使用依賴註入給成員變數賦值
@Component
public class Me {
private String name;
private List<String> hobby;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getHobby() {
return hobby;
}
public void setHobby(List<String> hobby) {
this.hobby = hobby;
}
@Override
public String toString() {
return "Me{" +
"name='" + name + '\'' +
", hobby=" + hobby +
'}';
}
}
3.5.2、創建控制器方法
@Autowired
private Me me;
@RequestMapping("/me")
public Me me(){
return me;
}
3.5.3、@Value註解的不足
-
@Value 註解需要一個個讀取配置文件中的參數值到成員變數中;
-
@Value 註解只能讀取單個值,不能讀取集合類型(本例為 my.hobby )的值。
@Value("${my.name}")
private String name;
@Value("${my.hobby}")
private List<String> hobby;
3.5.4、@ConfigurationProperties註解
-
@ConfigurationProperties 註解是 spring boot 提供的重要註解,其作用是可以將配置批量註入到 bean 對象中;
-
只要 @ConfigurationProperties 註解指定的首碼 + bean 對象中的屬性名稱,和配置文件中的“鍵”保持一致即可註入成功;
-
該註解的優點除了方便(不需要一個個讀取配置文件中的參數值到成員變數中)之外,還支持給集合類型賦值。
@ConfigurationProperties(prefix = "my")
3.5.5、測試配置批量註入的效果
3.6、多環境的配置
-
在一個項目的實際過程中,會存在不同的環境,例如開發、測試和生產環境;
-
在不同的環境中,會使用不同的參數配置,例如資料庫信息和日誌級別等;
-
在 spring boot 中,可以根據不同的運行環境來載入不同的配置。
註意:如果希望預設配置文件不太臃腫,也可以使用該功能將不同模塊的配置參數存放到不同的配置文件中
3.6.1、配置文件分離
創建一個用於開發環境的配置文件 application-dev.properties
# 該文件的配置用於開發環境
my.name=liaojy_dev
創建一個用於測試環境的配置文件 application-test.properties
# 該文件的配置用於測試環境
my.name=liaojy_test
創建一個用於測試環境的配置文件 application-prod.properties
# 該文件的配置用於生產環境
my.name=liaojy_prod
3.6.2、激活配置文件
# application.properties(.yml) 是 spring boot 的預設配置文件
# 如果沒有額外激活其他(有尾碼的)配置文件,則預設只使用 application.properties(.yml)
my.name=liaojy_default
# spring.profiles.active 參數用於激活指定的配置文件
# 本例激活的是 application-dev.properties 配置文件
# 如果想激活多個配置文件,則使用逗號分隔,例如:spring.profiles.active=dev,test
spring.profiles.active=dev
3.6.3、配置參數的優先順序
-
如果設置了 spring.profiles.active ,但和 application.properties 無重疊的配置參數,則application.properties 的配置參數依然生效;
-
如果設置了 spring.profiles.active ,並且和 application.properties 有重疊的配置參數,則以激活的配置參數優先;
-
如果設置了 spring.profiles.active ,並且激活多個配置文件以及有重疊的配置參數,則以最後激活的配置參數優先。
3.6.4、測試效果
本文來自博客園,作者:Javaer1995,轉載請註明原文鏈接:https://www.cnblogs.com/Javaer1995/p/17910266.html