前言:
大家好,我是良辰丫,上一篇文章中我們已經(jīng)學(xué)習(xí)了Spring Boot項目的的創(chuàng)建,今天我們會學(xué)習(xí)Spring Boot的配置文件,在今天的學(xué)習(xí)中我們會遇到許多我們不認(rèn)識的注解,這些注解是Spring MVC中的,我們后續(xù)會介紹,大家先不用管這些注解是什么意思
.那么,為什么不先學(xué)習(xí)MVC呢?我想讓大家先接觸注解,最起碼有個印象,后面學(xué)習(xí)起來也就變得簡單了.??????
??個人主頁:良辰針不戳
??所屬專欄:javaEE進階篇之框架學(xué)習(xí)
??勵志語句:生活也許會讓我們遍體鱗傷,但最終這些傷口會成為我們一輩子的財富。
??期待大家三連,關(guān)注,點贊,收藏。
??作者能力有限,可能也會出錯,歡迎大家指正。
??愿與君為伴,共探Java汪洋大海。
1. 初識Spring Boot配置文件
- 在spring中我們認(rèn)識了pom.xml配置文件,這個配置文件是為了引入我們的依賴.
- 配置文件是為了配置項目中的一些數(shù)據(jù),比如端口,數(shù)據(jù)庫等信息.
配置文件通常分為兩種:
- 系統(tǒng)使用的配置文件,比如端口的設(shè)置等.
- 用戶自定義配置文件.
2. 配置文件的格式
在我們的Spring Boot中,通常使用兩種配置文件,我們的這兩種配置文件放在resources文件中.
- properties文件.
- yml文件.
為什么要有這兩種配置文件呢?
- 兩種配置文件可以理解為不同的樣式,兩種文件都可以實現(xiàn)相應(yīng)的配置功能.
- 我們之前學(xué)過前后端交互,約定相應(yīng)的格式,可以選擇各種各樣的格式,但是約定好了,前后端要有相同的約定格式,才能進行交互.回到我們spring boot這里,兩種不同的配置文件是兩種風(fēng)格,大家可以選擇自己喜歡的去使用.
- 那么,兩種配置文件可以同時出現(xiàn)嘛?可以同時出現(xiàn),但是properties的優(yōu)先級比yml的高.如果兩個配置文件都要修改容器的端口,那么會按照properties修改的為準(zhǔn).
- 理論上,兩者配置文件可以同時出現(xiàn),但是在我們實際的項目中一般只會采用其中的一種即可.
3. properties配置文件
properties 配置?件是最早期的配置?件格式,也是創(chuàng)建 Spring Boot 項?默認(rèn)的配置?件.比較古老,但是在我們的項目中也經(jīng)常使用.
3.1 properties 的用法
- properties 是以鍵值的形式配置的,key 和 value 之間是以“=”連接的
- 井號后面加注釋.
# 配置項?端?號
server.port=6666
從運行的結(jié)果看,端口號已經(jīng)被成功修改為6666.
6666端口無法通過瀏覽器訪問頁面,端口可能被占用,我們換一個8888端口.
3.2 代碼讀取配置文件
- 在項?中,想要主動的讀取配置?件中的內(nèi)容,可以使? @Value 注解來實現(xiàn)。
- @Value 注解使?“${}”的格式讀取.
- 還有一點需要注意的是我們在導(dǎo)入包的時候別導(dǎo)錯,Lombok里面也有一個value包,導(dǎo)入這個無法使用我們下面語句的value.
properties配置文件
# 設(shè)置端口號
server.port=8888
# 自定義配置文件
name= zhangsan
password= 12345
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.beans.factory.annotation.Value;
import javax.annotation.PostConstruct;
@Controller // 當(dāng)前類為控制器
@ResponseBody // 返回的是數(shù)據(jù),而非頁面
public class User2 {
@Value("${name}")
private String name;
@Value("${password}")
private String password;
@RequestMapping("/user2")
public String get(){
return "name: "+name+"<br>"+
"password: "+password;
}
}
3.3 properties的缺點
- properties是key-value的形式.
- 從上面的截圖中我們可以得出,一級配置,二級配置等等 N級配置,沒用一次就要重復(fù)寫一次,非常冗余.
- 那么我們有辦法可以做到不冗余嘛?下面我們將學(xué)習(xí)yml配置文件,這種配置就可以做到不冗余.
4. yml配置文件
4.1 初識yml
yml 是 YAML 是縮寫,它的全稱 Yet Another Markup Language 翻譯成中?就是“另?種標(biāo)記語?”。
- yml 是?個可讀性?,寫法簡單、易于理解,它的語法和 JSON 語?類似。
- yml ?持更多的數(shù)據(jù)類型,它可以簡單表達(dá)清單(數(shù)組)、散列表,標(biāo)量等數(shù)據(jù)形態(tài)。它使?空?符號縮進和?量依賴外觀的特?,特別適合?來表達(dá)或編輯數(shù)據(jù)結(jié)構(gòu)、各種配置?件等。
- yml ?持更多的編程語?,它不?是 Java 中可以使?在 Golang、PHP、Python、Ruby、JavaScript、Perl 中.
4.2 yml的用法
yml 是樹形結(jié)構(gòu)的配置?件,它的基礎(chǔ)語法是“key: value”,注意 key 和 value 之間使?英?冒汗加空格的?式組成的.
下面的截圖足以說明yml配置文件相比于上面的配置文件,減少了冗余性.
4.3 yml不同的數(shù)據(jù)類型
暫時先簡單了解.
# 字符串
string.value: Hello
# 布爾值,true或false
boolean.value: true
boolean.value1: false
# 整數(shù)
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ?進制
# 浮點數(shù)
float.value: 3.14159
float.value1: 314159e-5 # 科學(xué)計數(shù)法
# Null,~ 代表null
null.value: ~
4.4 yml 配置讀取
# 自定義配置文件
name: 李四
password: 12345
package com.example.demo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.beans.factory.annotation.Value;
//import javax.annotation.PostConstruct;
@Controller // 當(dāng)前類為控制器
@ResponseBody // 返回的是數(shù)據(jù),而非頁面
public class User2 {
@Value("${name}")
private String name;
@Value("${password}")
private String password;
@RequestMapping("/user2")
public String get(){
return "name: "+name+"<br>"+
"password: "+password;
}
}
- yml支持中文的讀寫.
- 兩種配置讀取其實大同小異.
4.5 三種字符串的區(qū)別
經(jīng)過測試,三種字符串的形式可以如下.
- 直接寫字符串
- 單引號的字符串
- 雙引號的字符串
我們來通過一個構(gòu)造方法,直接在控制臺上打印.
# yml配置文件
str1: 你好,葉良辰
str2: '你好,葉良辰'
str3: "你好,葉良辰"
package com.example.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.PostConstruct;
@Controller // 當(dāng)前類為控制器
@ResponseBody // 返回的是數(shù)據(jù),而非頁面
public class User3 {
@Value("${str1}")
private String str1;
@Value("${str2}")
private String str2;
@Value("${str3}")
private String str3;
@PostConstruct
public void postConstruct() {
System.out.println("string.str1:" + str1);
System.out.println("string.str2:" + str2);
System.out.println("string.str3:" + str3);
}
}
通過運行結(jié)果我們可以得知,此時三種形式?jīng)]有區(qū)別,那么如果我們加一個轉(zhuǎn)義字符呢?
# yml配置文件
str1: 你好,\n葉良辰
str2: '你好,\n葉良辰'
str3: "你好,\n葉良辰"
通過運行結(jié)果我們可以看出,雙引號的字符串被轉(zhuǎn)義了換行,那么我們在改造一下,給雙引號里面多加一個斜杠,然后再來觀察運行結(jié)果.
此時我們可以發(fā)現(xiàn)三種運行結(jié)果相同.
小結(jié) :
- 字符串默認(rèn)不?加上單引號或者雙引號。
- 單引號會轉(zhuǎn)義特殊字符,特殊字符最終只是?個普通的字符串?dāng)?shù)據(jù)。
- 雙引號不會轉(zhuǎn)義字符串??的特殊字符;特殊字符會作為本身想表示的意思。
4.6 yml配置對象
4.6.1 塊級寫法
student:
id: 1
name: 張三
age: 18
package com.example.demo;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties("student")
@Data
public class Student {
private int id;
private String name;
private int age;
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.PostConstruct;
@Controller // 當(dāng)前類為控制器
@ResponseBody // 返回的是數(shù)據(jù),而非頁面
public class User3 {
@Autowired
private Student student;
@PostConstruct
public void postConstruct() {
System.out.println(student);
}
}
4.6.2 行內(nèi)寫法
student: {id: 1,name: 張三,age: 18}
這個時候就不能? @Value 來讀取配置中的對象了,此時要使?另?個注解@ConfigurationProperties 來讀取.
4.7 配置集合,簡單了解
yml配置,兩種配置都可以
dbtypes:
name:
- 張三
- 李四
- 王五
dbtypes: {name: [張三,李四,王五]}
java文件文章來源:http://www.zghlxwxcb.cn/news/detail-473323.html
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
public class User4 {
@Autowired
private ListConfig listConfig;
@PostConstruct
public void post(){
System.out.println(listConfig.getName());
}
}
package com.example.demo;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
private List<String> name;
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-473323.html
5. properties 與 yml 的比較
- properties 是以 key=value 的形式配置的鍵值類型的配置?件,? yml 使?的是類似 json 格式的樹形配置?式進?配置的,yml 層級之間使?換?縮進的?式配置,key 和 value 之間使?“: ”英?冒號加空格的?式設(shè)置,并且空格不可省略。
- properties 為早期并且默認(rèn)的配置?件格式,但其配置存在?定的冗余數(shù)據(jù),使? yml 可以很好的解決數(shù)據(jù)冗余的問題。
- yml 通?性更好,?持更多語?,如 Java、Go、Python 等,如果是云服務(wù)器開發(fā),可以使??份配置?件作為 Java 和 Go 的共同配置?件。
- yml ?持更多的數(shù)據(jù)類型。
總而言之,我們需要記住properties是老版配置,yml是新版配置,yml的功能更完善,且支持中文.
到了這里,關(guān)于【Spring Boot學(xué)習(xí)】今天是我的生日,舍友催我去吃飯,我還是堅持寫完了Spring Boot配置文件,祝自己生日快樂哈的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!