SpringBoot讀取application.yml作為配置的處理
Spring Boot 的一大優(yōu)勢(shì)是 “約定優(yōu)于配置” + “配置外部化”。
你不需要寫(xiě) XML 或硬編碼參數(shù),而是把配置放在 application.yml(或 application.properties) 中,Spring Boot 自動(dòng)加載并注入到你的應(yīng)用中。
支持格式:.properties(鍵值對(duì)) 和 .yml(YAML,層次清晰,推薦)
Spring Boot 會(huì)按以下順序查找 application.yml(后出現(xiàn)的會(huì)覆蓋前面的):
- 當(dāng)前項(xiàng)目根目錄下的 /config 子目錄
- 當(dāng)前項(xiàng)目根目錄下
- classpath 下的 /config 包
- classpath 根路徑(即 src/main/resources/)
最常用:src/main/resources/application.yml
基本用法:在代碼中讀取配置
1.使用 @Value(適合少量配置)
# application.yml app: name: MySpringBootApp version: 1.0.0
@Component
public class AppConfig {
@Value("${app.name}")
private String appName;
@Value("${app.version}")
private String version;
}2.使用 @ConfigurationProperties(推薦!適合結(jié)構(gòu)化配置)
步驟 1:在 application.yml 中配置
# application.yml database: host: 192.168.1.100 port: 3307 username: admin password: secret123
步驟 2:定義配置類(lèi)
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "database") // 對(duì)應(yīng) yml 中 database 開(kāi)頭的配置
public class DatabaseConfig {
private String host = "localhost";
private int port = 3306;
private String username;
private String password;
// 必須有 getter/setter(或用 Lombok @Data)
public String getHost() { return host; }
public void setHost(String host) { this.host = host; }
public int getPort() { return port; }
public void setPort(int port) { this.port = port; }
// ... 其他 setter/getter
}
步驟 3:在其他 Bean 中注入使用
@Service
public class UserService {
private final DatabaseConfig dbConfig;
public UserService(DatabaseConfig dbConfig) {
this.dbConfig = dbConfig;
}
public void connect() {
System.out.println("連接數(shù)據(jù)庫(kù): " + dbConfig.getHost() + ":" + dbConfig.getPort());
}
}
支持復(fù)雜結(jié)構(gòu):嵌套對(duì)象、List、Map
# application.yml
app:
security:
jwt:
secret: mySecretKey
expire-hours: 24
cors:
allowed-origins:
- http://localhost:3000
- https://myapp.com@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
private Security security = new Security();
public static class Security {
private Jwt jwt = new Jwt();
private Cors cors = new Cors();
public static class Jwt {
private String secret;
private int expireHours;
// getters/setters
}
public static class Cors {
private List<String> allowedOrigins = new ArrayList<>();
// getter/setter
}
// getters/setters
}
// getter for security
}
啟用 @ConfigurationProperties 的兩種方式
1. 在配置類(lèi)上加 @Component
@Component
@ConfigurationProperties(prefix = "xxx")
public class XxxProperties { ... }
2. 在 @Configuration 類(lèi)上使用 @EnableConfigurationProperties
@Configuration
@EnableConfigurationProperties({DatabaseConfig.class, AppProperties.class})
public class AppConfig { }
不要同時(shí)用兩種方式,否則可能創(chuàng)建多個(gè)實(shí)例
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- springboot一鍵application.yml配置文件實(shí)踐
- SpringBoot application.yml配置文件使用及說(shuō)明
- Springboot的application.properties或application.yml環(huán)境的指定運(yùn)行與配置方式
- SpringBoot配置文件中常用配置屬性詳解(application.properties/application.yml)
- SpringBoot使用Nacos進(jìn)行application.yml配置管理詳解
- SpringBoot中application.yml基本配置解讀
- SpringBoot使用Nacos進(jìn)行application.yml配置管理
相關(guān)文章
Java實(shí)現(xiàn)創(chuàng)建運(yùn)行時(shí)類(lèi)的對(duì)象操作示例
這篇文章主要介紹了Java實(shí)現(xiàn)創(chuàng)建運(yùn)行時(shí)類(lèi)的對(duì)象操作,結(jié)合實(shí)例形式分析了Java動(dòng)態(tài)創(chuàng)建對(duì)象的原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-08-08
JavaWeb Session失效時(shí)間設(shè)置方法
這篇文章主要介紹了JavaWeb Session失效時(shí)間設(shè)置方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12
Java ES(Elasticsearch) 中的and 和 or 查
Elasticsearch 是一個(gè)分布式、高擴(kuò)展、高實(shí)時(shí)的搜索與數(shù)據(jù)分析引擎,es中match查詢(xún)中,查詢(xún)字符串分詞后,默認(rèn)是or或者的關(guān)系,這篇文章主要介紹了ES 中的and 和 or 查詢(xún),需要的朋友可以參考下2022-11-11
mybatis?foreach傳兩個(gè)參數(shù)批量刪除
這篇文章主要介紹了mybatis?foreach?批量刪除傳兩個(gè)參數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
Spring boot如何快速的配置多個(gè)Redis數(shù)據(jù)源
這篇文章主要介紹了Spring boot如何快速的配置多個(gè)Redis數(shù)據(jù)源,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Java中replace與replaceAll的區(qū)別與測(cè)試
replace和replaceAll是JAVA中常用的替換字符的方法,下面這篇文章主要給大家介紹了關(guān)于Java中replace與replaceAll的區(qū)別與測(cè)試,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
druid執(zhí)行SQL出現(xiàn)錯(cuò)誤但不影響返回結(jié)果的問(wèn)題及解決
這篇文章主要介紹了druid執(zhí)行SQL出現(xiàn)錯(cuò)誤但不影響返回結(jié)果的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
idea中項(xiàng)目前端網(wǎng)頁(yè)圖標(biāo)不顯示的原因及解決
這篇文章主要介紹了idea中項(xiàng)目前端網(wǎng)頁(yè)圖標(biāo)不顯示的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
Spring?Cloud?OpenFeign實(shí)例介紹使用方法
Spring?Cloud?OpenFeign?對(duì)?Feign?進(jìn)行了二次封裝,使得在?Spring?Cloud?中使用?Feign?的時(shí)候,可以做到使用?HTTP?請(qǐng)求訪問(wèn)遠(yuǎn)程服務(wù),就像調(diào)用本地方法一樣的,開(kāi)發(fā)者完全感知不到這是在調(diào)用遠(yuǎn)程訪問(wèn),更感知不到在訪問(wèn)?HTTP?請(qǐng)求2022-09-09

