SpringBoot 的參數(shù)配置示例全解析
當(dāng)然了解,Spring Boot 的參數(shù)配置是其核心特性之一,也是它實(shí)現(xiàn)“約定大于配置”理念的關(guān)鍵。它極大地簡化了傳統(tǒng) Spring 應(yīng)用中繁瑣的 XML 配置。
一、核心概念:application.properties與application.yml
Spring Boot 默認(rèn)使用這兩種文件進(jìn)行配置(二者選其一即可,.yml 更常用)。
application.properties (傳統(tǒng)鍵值對格式)
server.port=8081 spring.datasource.url=jdbc:mysql://localhost:3306/mydb spring.datasource.username=root spring.datasource.password=secret logging.level.com.example.demo=debug
application.yml (YAML 格式,層次感更強(qiáng),推薦使用)
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb
username: root
password: secret
logging:
level:
com.example.demo: debugYAML 注意事項:縮進(jìn)必須使用空格,不能使用 Tab 鍵,冒號后面必須有一個空格。
二、配置的加載位置與優(yōu)先級
Spring Boot 會從以下位置按從高到低的優(yōu)先級加載 application 配置文件(高優(yōu)先級的配置會覆蓋低優(yōu)先級的配置):
- 當(dāng)前項目根目錄下的
/config子目錄 - 當(dāng)前項目根目錄
- classpath 下的
/config包 (即src/main/resources/config) - classpath 根路徑 (即
src/main/resources)
最佳實(shí)踐:在開發(fā)時,將通用配置放在 src/main/resources/application.yml 中。在打包部署時,可以在 JAR 包所在目錄創(chuàng)建一個 config 文件夾,里面放一個 application.yml 來覆蓋開發(fā)環(huán)境的配置(如數(shù)據(jù)庫連接),這樣就實(shí)現(xiàn)了配置與代碼分離。
三、外部化配置(非常強(qiáng)大)
除了配置文件,Spring Boot 還支持多種外部配置方式,優(yōu)先級高于 application.yml。這在容器化部署(如 Docker)時尤其有用。
- 命令行參數(shù)
java -jar yourapp.jar --server.port=8888 --spring.datasource.url=jdbc:mysql://prod-server:3306/proddb
- 操作系統(tǒng)環(huán)境變量
- Spring Boot 會自動識別形如
SPRING_DATASOURCE_URL的環(huán)境變量(注意大小寫和下劃線)。
- Spring Boot 會自動識別形如
- Profile-specific 配置(多環(huán)境配置)
- 這是管理不同環(huán)境(開發(fā)、測試、生產(chǎn))配置的最佳方式。
- 在通用的
application.yml中,通過spring.profiles.active屬性來激活特定環(huán)境的配置。 - 配置文件命名規(guī)則:
application-{profile}.yml
- 例如:
application-dev.yml(開發(fā)環(huán)境)application-test.yml(測試環(huán)境)application-prod.yml(生產(chǎn)環(huán)境)
application.yml
spring:
profiles:
active: dev # 默認(rèn)激活開發(fā)環(huán)境激活方式:
- 在配置文件中設(shè)置(如上所示)。
- 命令行激活:
java -jar yourapp.jar --spring.profiles.active=prod - JVM 參數(shù):
-Dspring.profiles.active=test - 環(huán)境變量:
export SPRING_PROFILES_ACTIVE=prod
四、如何在代碼中獲取配置值?
@Value 注解 (適用于單個屬性)
@Component
public class MyComponent {
@Value("${server.port}")
private int serverPort;
@Value("${app.message: Hello Default}") // 使用冒號指定默認(rèn)值
private String message;
// ...
}@ConfigurationProperties 注解 (推薦,用于綁定一組配置)
這是更類型安全、更面向?qū)ο蟮姆绞健?/p>
步驟 1:在 application.yml 中定義配置
app:
user:
name: "Alice"
age: 30
email: "alice@example.com"
hobbies:
- reading
- hiking步驟 2:創(chuàng)建一個配置類來綁定這些屬性
@Component
@ConfigurationProperties(prefix = "app.user") // 前綴是 app.user
@Data // Lombok 注解,自動生成 getter/setter
// 或者也可以手動寫 getter 和 setter
public class UserProperties {
private String name;
private Integer age;
private String email;
private List<String> hobbies;
}步驟 3:在需要的地方注入并使用
@Service
public class MyService {
@Autowired
private UserProperties userProperties;
public void doSomething() {
System.out.println("User name: " + userProperties.getName());
System.out.println("User hobbies: " + userProperties.getHobbies());
}
}別忘了在啟動類上添加 @EnableConfigurationProperties 注解(但如果你像上面一樣在配置類上使用了 @Component,則不需要)。
五、常用配置示例
# 服務(wù)器配置
server:
port: 8080
servlet:
context-path: /api # 應(yīng)用上下文路徑
# 數(shù)據(jù)源配置
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
# JPA 配置
jpa:
hibernate:
ddl-auto: update # 生產(chǎn)環(huán)境不要用 create-drop 或 update
show-sql: true
# 日志配置
logging:
level:
root: info
org.springframework.web: debug
com.example: trace
file:
name: logs/myapp.log # 輸出到文件
# 自定義配置
myapp:
feature:
enabled: true
api-url: https://api.example.com總結(jié)
Spring Boot 的參數(shù)配置系統(tǒng)非常靈活和強(qiáng)大,其核心思想是:
- 約定大于配置:提供了大量默認(rèn)配置,開箱即用。
- 配置外部化:允許你通過文件、命令行、環(huán)境變量等多種方式覆蓋默認(rèn)配置,輕松適應(yīng)不同環(huán)境。
- 類型安全綁定:通過
@ConfigurationProperties可以輕松地將一組配置映射到 Java Bean 上,是管理自定義配置的首選方式。
到此這篇關(guān)于SpringBoot 的參數(shù)配置示例全解析的文章就介紹到這了,更多相關(guān)SpringBoot 參數(shù)配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Rabbitmq死信隊列及延時隊列的實(shí)現(xiàn)
這篇文章主要介紹了關(guān)于Rabbitmq死信隊列及延時隊列的實(shí)現(xiàn),TTL就是消息或者隊列的過期功能,當(dāng)消息過期就會進(jìn)到死信隊列,死信隊列和普通隊列沒啥區(qū)別,然后我們只需要配置一個消費(fèi)者來消費(fèi)死信隊列里面的消息就可以了,需要的朋友可以參考下2023-08-08
kafka消費(fèi)不到數(shù)據(jù)的排查過程
這篇文章主要介紹了kafka消費(fèi)不到數(shù)據(jù)的排查過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
Spring MVC結(jié)合Spring Data JPA實(shí)現(xiàn)按條件查詢和分頁
這篇文章主要為大家詳細(xì)介紹了Spring MVC結(jié)合Spring Data JPA實(shí)現(xiàn)按條件查詢,以及分頁效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
SpringBoot使用@Slf4j注解實(shí)現(xiàn)日志輸出的示例代碼
@Slf4j 是 Lombok 庫中的一個注解,它極大地簡化了日志記錄的代碼,通過使用這個注解,Lombok 會自動在你的類中注入一個靜態(tài)的日志對象,本文給大家介紹了SpringBoot使用@Slf4j注解實(shí)現(xiàn)日志輸出的方法,需要的朋友可以參考下2024-10-10
Java接口的回調(diào)機(jī)制的實(shí)現(xiàn)
本文主要介紹了Java中回調(diào)機(jī)制的實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
Java httpcomponents發(fā)送get post請求代碼實(shí)例
這篇文章主要介紹了Java httpcomponents發(fā)送get post請求代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09
Java代碼格式化工具(PMD,Checkstyle)的學(xué)習(xí)指南
在?Java?開發(fā)的旅程中,編寫整潔、規(guī)范的代碼是每個開發(fā)者追求的目標(biāo),本文將深入探討?PMD?和?Checkstyle?的功能,使用方法以及它們?nèi)绾螏椭覀冏尨a煥然一新吧2025-05-05
實(shí)例講解Java的設(shè)計模式編程中責(zé)任鏈模式的運(yùn)用
這篇文章主要介紹了Java的設(shè)計模式編程中責(zé)任鏈模式的運(yùn)用,講解了通過條件判斷結(jié)構(gòu)來分配不同對象的責(zé)任權(quán)限,需要的朋友可以參考下2016-02-02

