SpringBoot配置文件properties和yml的實(shí)現(xiàn)
配置文件的作用
通常情況下,一個(gè)項(xiàng)目中的一些重要信息都會(huì)放在配置文件中,比如:數(shù)據(jù)庫的連接信息、項(xiàng)目的啟動(dòng)端口、一些第三方的秘鑰、記錄信息的普通日志和異常日志等。
SprintBoot的配置文件(兩種):
Spring Boot的配置文件主要有兩種格式:
.properties和.yml

這兩種格式的配置文件可以共同存在于一個(gè)項(xiàng)目中,但一般情況下我們會(huì)統(tǒng)一格式,只使用其中的一種,來降低故障率。
.properties是最早期的SpringBoot配置文件的格式,也是現(xiàn)在默認(rèn)的配置文件格式,出現(xiàn)的時(shí)間早于.yml。
當(dāng)這兩個(gè)配置文件中出現(xiàn)相同的配置時(shí),會(huì)優(yōu)先執(zhí)行.properties中的配置,然后再執(zhí)行.yml中的配置,即.properties的優(yōu)先級(jí)大于.yml
properties
創(chuàng)建SpringBoot項(xiàng)目后會(huì)自動(dòng)生成一個(gè)配置文件,在該文件中,信息以鍵值對(duì)的形式進(jìn)行儲(chǔ)存。
# 配置項(xiàng)目的信息 # key=value server.port=8080 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb? characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=root
如果我們想要在這個(gè)文件中配置一些信息,可以在遵循key-value格式下,可以定義任意名稱的key
缺點(diǎn):
對(duì)于同一個(gè)對(duì)象的多個(gè)屬性進(jìn)行設(shè)置時(shí)很麻煩,需要多次重復(fù),存在冗余配置項(xiàng)。
如下,當(dāng)我們想要設(shè)置同一個(gè)對(duì)象很多的信息時(shí),需要多次重復(fù)這個(gè)信息:

而yml就很好的解決了這個(gè)問題。
yml
yml是YMAL的縮寫,全稱是 Yet Another Markup Language,另一種標(biāo)記語言。
YMAL是一個(gè)可讀性高、易于理解、用來表達(dá)數(shù)據(jù)序列化的格式。
YMAL的作用是可以做到跨語言使用,不僅Java中可以使用,Go和python中都可以使用。
1.語法格式:
key: value表示鍵值對(duì)關(guān)系,冒號(hào)后面必須加一個(gè)空格
大小寫敏感
縮進(jìn)時(shí)不允許使用tab鍵,只能用空格
左對(duì)齊的一列數(shù)據(jù)就表示同一級(jí)
松散表示,java使用駝峰命名,而用原名或者-代替都可以正確映射,比如java中的名稱是lastName,yml中使用lastName或者last-name都可以映射到。
2.鍵值關(guān)系
# 通常寫法:
student:
id: 1
name: 張三
age: 20
# 行內(nèi)寫法
student: { id: 1,name: 張三, age: 20}yml中,字符串默認(rèn)不需要加上單引號(hào)或者雙引號(hào)
使用雙引號(hào):不會(huì)轉(zhuǎn)義字符串中的特殊字符,特殊字符會(huì)作為本身想要表達(dá)的意思:比如 name: “zhangsan \n 23”,會(huì)輸出:zhangsan 換行 23
使用單引號(hào):會(huì)轉(zhuǎn)義特殊字符,特殊字符失去特殊作用變成普通字符。
在配置文件中,它是以鍵值對(duì)的形式儲(chǔ)存信息的,如果是自己配置的信息,你可以在遵循key-value的格式下,定義任何名稱的key.
使用YML連接數(shù)據(jù)庫:
sping:
datasource:
url:jdbc: mysql://127.0.0.0:3306/dbname?characterEncoding=tuf8
username: root
password: root
表示常用的字面量:
# 普通字面量
name: zhangsan
age: 18
#布爾類型
flag: true
#日期
date: 2022/04/15
# 同一個(gè)對(duì)象的多個(gè)屬性
people:
name: lisi
age: 20
# 數(shù)組
# 用 -表示數(shù)組中的一個(gè)元素
pets:
- cat
- dog
- pig
# 行內(nèi)寫法
petss: [dog,cat,pig]
# list對(duì)象、set對(duì)象、數(shù)組對(duì)象
students:
- name: zhangsan
age: 22
- name: lisi
age: 20
- {name: wangwu,age: 18}
讀取配置文件的方法:
@Value注解讀取單個(gè)配置項(xiàng)
如果我們想要主動(dòng)的讀取配置文件中的信息,可以使用注解@Value。
使用格式:
@Value("${server.port}")
private String port;在屬性前加上@Value注解,后面的括號(hào)寫入要讀取的配置中哪個(gè)key,比如讀取下面的server.port,注意格式:雙引號(hào)+${}
# 配置項(xiàng)目端口 server.port=8080
在測試類中得到這個(gè)值并進(jìn)行打?。?/p>
package com.example.demo;
import Controller.TestReadYml;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication implements InitializingBean {
@Value("${server.port}")
private String port;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class,args);
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println(" ");
System.out.println("讀取到信息:"+port);
System.out.println(" ");
}
}
輸入:

@ConfigurationProperties讀取實(shí)體類
1.將配置文件中的一組對(duì)象映射到實(shí)體類上:
使用格式:
@Component //spring 啟動(dòng)時(shí)直接將配置文件映射到當(dāng)前類屬性上
@ConfigurationProperties("student") //student是在配置好的key
舉例:
在yml配置文件中,我們創(chuàng)建一個(gè)student對(duì)象:
student:
id: 1
name: 張三
age: 20
將這個(gè)對(duì)象映射到Student類中,也就是從配置文件里讀取到類中,
package model;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component //spring 啟動(dòng)時(shí)直接將配置文件映射到當(dāng)前類屬性上
@ConfigurationProperties("student")
public class Student {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2.使用注入的方式將對(duì)象注入到一個(gè)類中
在啟動(dòng)類中注入Student類進(jìn)行使用:
package com.example.demo;
import com.example.demo.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@SpringBootApplication
@Component
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class,args);
}
//屬性注入
@Autowired
private Student student;
@PostConstruct
private void postConstruct(){
System.out.println("Read Yml:"+student);
}
}輸出:
Read Yml:Student{id=1, name='張三', age=20}
注意包路徑配置的問題?。?!
啟動(dòng)類和要注入的類包必須放在同級(jí)目錄下,否則讀取不到,會(huì)顯示啟動(dòng)失敗Application failed to start.

properties VS yml 總結(jié)
- yml語法更簡潔,可以解決數(shù)據(jù)冗余問題
- yml跨語言的通用性更好,它不支持java語言還支持golang 和python
- yml 支持更多的數(shù)據(jù)類型
- yml格式的配置文件在寫的時(shí)候更容易出錯(cuò)(冒號(hào)后面需要加一個(gè)空格),而properties雖然寫法更復(fù)雜但是不容易出錯(cuò)。
- yml雖然可以和properties共存,但一個(gè)項(xiàng)目中最好統(tǒng)一格式,只用其中的一個(gè)。
到此這篇關(guān)于SpringBoot配置文件properties和yml的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringBoot配置文件properties和yml內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java中char類型轉(zhuǎn)換成int類型的2種方法
這篇文章主要給大家介紹了關(guān)于java中char類型轉(zhuǎn)換成int類型的2種方法,因?yàn)閖ava是一門強(qiáng)類型語言,所以在數(shù)據(jù)運(yùn)算中會(huì)存在類型轉(zhuǎn)換,需要的朋友可以參考下2023-07-07
Apache Commons fileUpload實(shí)現(xiàn)文件上傳之一
這篇文章主要介紹了Apache Commons fileUpload實(shí)現(xiàn)文件上傳之一的相關(guān)資料,需要的朋友可以參考下2016-03-03
java獲取版本號(hào)及字節(jié)碼編譯版本方法示例
這篇文章主要給大家介紹了關(guān)于java獲得版本號(hào)及字節(jié)碼編譯版本的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10
簡單介紹區(qū)分applet和application的方法
applet和application都是Java語言編寫出來的應(yīng)用程序,本文簡單介紹了二者的不同之處,需要的朋友可以參考下2017-09-09
JAVA 實(shí)現(xiàn)延遲隊(duì)列的方法
這篇文章主要介紹了JAVA 實(shí)現(xiàn)延遲隊(duì)列的方法,文中講解非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06

