日升時奮斗,日落時自省?
目錄
1、配置文件作用
2、配置文件格式
2.1、使用注意
3、properties配置文件
3.1、注釋中文問題
3.2、properties語法格式
3.3、讀取配置文件
3.3.1、Value讀取
3.3.2、PropertySource讀取
3.3.3、原生方式讀取配置文件
3.4、properties缺點分析
4、yml配置文件
4.1、優(yōu)點分析
4.2、yml語法格式
4.2.1、設(shè)置不同數(shù)據(jù)類型
4.2.2、yml配置讀取
?4.2.3、配置對象
4.2.4、配置集合
5、properties和yml區(qū)別
6、設(shè)置不同創(chuàng)建環(huán)境的配置文件
1、配置文件作用
配置文件是一種存儲應(yīng)用程序配置信息的文件,通常采用純文本格式
<1>存儲應(yīng)用程序的配置參數(shù):在軟件開發(fā)過程中,很多參數(shù)需要在運行時進(jìn)行調(diào)整,例如數(shù)據(jù)庫連接、日志級別等。通過配置文件,可以將這些參數(shù)組織起來并進(jìn)行統(tǒng)一管理
<2>方便程序的部署:在程序部署時,需要根據(jù)不同的環(huán)境進(jìn)行不同的配置,例如開發(fā)環(huán)境、測試環(huán)境和生產(chǎn)環(huán)境等。通過配置文件,可以輕松地進(jìn)行環(huán)境切換,從而方便程序的部署和管理
2、配置文件格式
Spring Boot配置文件主要分為兩種格式:
.properties (比較老的格式)
.yml(也能寫作.yaml 都算是新版格式)
兩者都是可以出現(xiàn)在一個目錄下使用的(使用就是同時存在而且還能跑)
類似于紙幣,舊紙幣和新紙幣,.properties 后綴的配置文件 就類似于“舊紙幣”,.yml類似于“新紙幣”但是效果都是一樣的100元,不能當(dāng)50元用嘛,還是原來的價值(都可以使用,也可以并存)
2.1、使用注意
<1>雖然.properties文件和.yml文件是可以在同一個項目中,但是這樣也會有所影響,.properties文件的優(yōu)先級還是比較高的,.properties配置文件會先進(jìn)行加載,.yml配置文件也加載但是需要在.properties配置文件之后
<2>盡可能的使用一種格式的配置文件,便于維護(降低故障可能性),推薦在剛剛開始學(xué)習(xí)SpringBoot的時候使用.properties配置文件
3、properties配置文件
properties配置文件是早期文件格式,也是默認(rèn)格式,在創(chuàng)建Spring Boot項目時,會直接創(chuàng)建好
3.1、注釋中文問題
有的友友肯定會遇到注釋中文亂碼?
?在配置文件中輸入 中文注釋,當(dāng)關(guān)閉idea再次打開時就會出現(xiàn)亂碼
不如提前解決這個問題,以免后面遇到了臨時處理很慌亂(提前預(yù)判)(修改兩個地方)
<1>當(dāng)前項目修改字符集
<2>修改新項目的字符集
最后操作:就是把本項目剛剛加載的properties配置文件給刪了,自己從新創(chuàng)建一個,就也是utf-8字符集?
3.2、properties語法格式
properties是鍵值對的形式配置的,鍵值連接方式是 “= ”連接的
這里演示幾個給友友們看,這里推薦友友們下載一個插件(這是社區(qū)版的插件,可以支持配置文件的快捷提示,方面我們輸入)
File -> Settings -> plugins
?安裝完成后,idea重啟 就可以了
# 首次使用properties配置文件
#配置文件中 設(shè)置端口號
server.port=8080
#設(shè)置數(shù)據(jù)庫連接
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/class?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
#也可以自定義 設(shè)置鍵值對
javaclass=myclass
3.3、讀取配置文件
配置不僅僅可以設(shè)置連接,端口號等固定操作,還可以設(shè)置自定義,在項目中會有主動讀取配置文件內(nèi)容情況,這里就涉及到了一個新的注解@Value來實現(xiàn)
3.3.1、Value讀取
使用操作:@Value("${key}")? ?這里的key就是鍵
就以上面的配置文件為例,我們拿一下 端口號 和 自定義設(shè)置的鍵值對
@RestController //相當(dāng)于 @Controller注解 和 @ResponseBody注解
@RequestMapping("/test") //設(shè)置路由
public class TestController {
@Value("${server.port}")
public String port;
@Value("${javaclass}")
public String mystr1;
@RequestMapping("/port") //設(shè)置二級路由
public void sayhi(){
System.out.println("從配置文件中拿出的端口號:"+port);
System.out.println("自定義配置文件鍵值對取值:"+mystr1);
}
}
類寫完之后,開始啟動Maven ,此時啟動控制臺并不會打印什么,需要訪問這里寫的myport路由
控制臺才會顯示打印結(jié)果
運行結(jié)果:?都是我們剛剛配置文件中設(shè)置的
3.3.2、PropertySource讀取
@PropertySource注解讀取方法只能讀取properties配置文件
下面就來演示@PropertySource注解的讀取操作,這里是指定讀取哪個properties配置文件
使用一個類來演示
//組合注解
@RestController
//該注解 指定讀取的配置文件 如果出現(xiàn)亂碼問題也可以設(shè)置字符集
@PropertySource(value = "application.properties",encoding = "utf8")
//設(shè)置路由地址
@RequestMapping("/proper")
public class ProperController {
@Value("${server.port}")
private String port;
@Value("${spring.datasource.url}")
private String url;
@RequestMapping("sayhi")
public void sayhi(){
System.out.println("指定配置文件獲取端口:"+port);
System.out.println("指定配置文件獲取連接:"+url);
}
}
?剩下部分就交給啟動了,啟動后需要訪問路由才能看見打印結(jié)果
運行結(jié)果:(友友們也可以從新創(chuàng)建一個properties配置文件進(jìn)行操作,兩個配置文件中設(shè)置不同的端口號,想要加載那個就給注解中添加那個配置文件)
注:該注解只能支持properties為后綴的配置文件?
3.3.3、原生方式讀取配置文件
原生的讀取配置文件的方式是使用 Properties 類,該類只支持以 .properties 為后綴的屬性文件,不支持讀取 YAML 格式的配置文件
@RestController
@RequestMapping("/native")
public class NativeController {
@RequestMapping("/sayhi")
public void sayhi() throws IOException {
//創(chuàng)建properties對象
Properties properties=new Properties();
//獲取配置文件中的字節(jié) 同時設(shè)置字符集
InputStreamReader inputStreamReader=new InputStreamReader(
this.getClass().getClassLoader().getResourceAsStream("application.properties"),
StandardCharsets.UTF_8);
//properties配置文件加載字節(jié)流
properties.load(inputStreamReader);
//獲取后就可以直接進(jìn)行打印了
System.out.println("Properties port:"+properties.getProperty("server.port"));
}
}
3.4、properties缺點分析
properties配置是以鍵值對的形式配置的
但是配置冗余代碼過多,前面寫有一個連接數(shù)據(jù)庫的配置(url,username,password前綴相同但是都需要再寫一次)
?當(dāng)然除了這個缺點,有個有利于我們的優(yōu)點就是格式很簡單(“=”號連接的鍵值對),允許空格隨便打
4、yml配置文件
yml全稱是yaml(Yet Another Markup Language),是一種基于文本的數(shù)據(jù)序列化語言,這里說yml是一種“語言”,是一種新的通用數(shù)據(jù)序列化格式(操作簡潔)
4.1、優(yōu)點分析
<1>易讀性高:YAML的語法結(jié)構(gòu)簡單、清晰,易于理解和閱讀。它的格式類似于自然語言,可以直接將數(shù)據(jù)表示為鍵值對,而不需要大量的標(biāo)記和轉(zhuǎn)義字符。
<2>可維護性高:由于YAML的易讀性,它更容易維護和修改。在開發(fā)過程中,程序員可以使用YAML格式的配置文件輕松地進(jìn)行調(diào)試和修改,而無需關(guān)心底層的數(shù)據(jù)結(jié)構(gòu)。
<3>支持多種類型的數(shù)據(jù):除了常見的字符串、數(shù)字、布爾值之外,YAML還支持?jǐn)?shù)組、哈希表等多種類型的數(shù)據(jù),能夠滿足各種應(yīng)用場景的需求。同時,YAML也支持一些高級特性,比如引用和錨點等,方便用戶在大型文件中進(jìn)行數(shù)據(jù)共享和重復(fù)利用。
<4>平臺無關(guān)性:YAML是基于文本的數(shù)據(jù)序列化格式,不依賴于任何特定的編程語言或操作系統(tǒng)平臺,因此具有良好的跨平臺可移植性。
<5>支持編程語言更為豐富,它不止限制于java使用,也可以使用在Python、PHP、JS等
雖然優(yōu)點很多,但是初學(xué)者使用Spring Boot不推薦使用,格式規(guī)定簡潔能省很多事情,但是格式是比較固定的,不謹(jǐn)慎容易出錯
4.2、yml語法格式
yml是樹形結(jié)構(gòu)的配置文件,優(yōu)點類似于Python的基礎(chǔ)語法格式,空格劃分等級,這里也是使用鍵值方式,連接鍵值方式 “key: value”
注:key后面有一個:冒號和一個空格,這個空格不能少(少了會報錯)
這里就還是拿剛剛properties的配置再yml中再寫一下
#yml配置文件 設(shè)置端口號
server:
port: 8080
# 設(shè)置連接數(shù)據(jù)庫
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/class?characterEncoding=utf8
username: root
password: root
#設(shè)置自定義 鍵值
javaclass: myclass
代碼冗余減少了,連接數(shù)據(jù)庫需要寫一次spring: datasource:?
4.2.1、設(shè)置不同數(shù)據(jù)類型
#設(shè)置字符串 以下這些都是我們自己設(shè)置的鍵值 不是yml中自帶的
string.value: string-hello
#設(shè)置布爾類型
boolean.value: true;
#設(shè)置整數(shù)
int.value: 100
#設(shè)置浮點數(shù)
float.value: 2.712
float.value1: 2712e-5 #使用科學(xué)計數(shù)法
#NULL表示 ~
null.value: ~
4.2.2、yml配置讀取
yml的讀取操作和properties配置文件基本是一樣的,使用@Value注解 參數(shù)中除了把key放入,注意:不是使用:冒號連接,這里獲取對象是.點來連接,現(xiàn)在我們先把剛剛properties配置文件中的內(nèi)容注釋掉, 以免影響yml加載,properties加載早于yml,也會優(yōu)先使用properties
還是在controller包中添加一個新類在寫yml讀取,ReadYml類
?4.2.3、配置對象
在配置文件中也可以寫一個對象以及對象的屬性
下面就來展示一下
#可以寫成鍵值不同等級的形式
student:
id: 1
name: 白無常
age: 20
#也可以將對象直接寫成類似數(shù)組的形式 行內(nèi)寫法
student1: {id: 2,name: 黑無常, age: 25}
針對對象的讀取就不能通過@Value注解來實現(xiàn)了,需要使用另外一個注解,此處又要接觸一個新的注解了@ConfigurationProperties注解來讀取
讀取對象是將配置文件中的對象獲取,所以要添加注解加載配置文件中指定的對象
這里需要創(chuàng)建一個對應(yīng)的實體類,當(dāng)然也不一定完全需要,多幾個屬性,最多就是值為null
實體類代碼:
@ConfigurationProperties(prefix = "student") //加載配置文件中 對應(yīng)到的對象
@Component //類注解
@Setter//lombok set方法注解
@Getter//lombok get方法注解
@ToString//lombok toString方法注解
public class StudentComponent {
private int id ;
private String name;
private int age;
}
控制層代碼:
@RestController //相當(dāng)于 @Controller注解 和 @ResponseBody注解
@RequestMapping("/test") //設(shè)置路由
public class TestController {
@Value("${server.port}")
public String port;
@Value("${javaclass}")
public String mystr1;
@Autowired
private StudentComponent studentComponent;
@RequestMapping("/port") //設(shè)置二級路由
public void sayhi(){
System.out.println("從配置文件中拿出的端口號:"+port);
System.out.println("自定義配置文件鍵值對取值:"+mystr1);
System.out.println(studentComponent.toString());
}
}
4.2.4、配置集合
配置文件也可以存放list集合,寫法上和對象有幾分相似
配置文件代碼 ,這里寫的代碼也是yml文件中寫的
#設(shè)置集合
databasetypes:
name: [mysql,sqlserver,db]
#集合的行內(nèi)寫法
databaserow: {name: [mysql,sqlserver,db]}]}
讀取集合:
這里我們還需要創(chuàng)建一個實體類來接收這個集合?(如下操作)
?針對集合創(chuàng)建的實體類:
@ConfigurationProperties(prefix = "databasetypes")
@RestController
@Setter
@Getter
@ToString
public class StudentComponent2 {
private List<String> name;
}
?注:prefix如果注解中參數(shù)只有一個,可以加也不加,前面寫的就沒有加
屬性注入,這里就不在附加代碼了,在之前附加的代碼上添加即可
當(dāng)然了,系統(tǒng)配置不是就止于此(有需求的友友們,可以自行去官網(wǎng)看看,下面是官網(wǎng)網(wǎng)址)
Common Application Properties
?5、properties和yml區(qū)別
<1>語法:Properties 使用簡單的鍵值對格式,例如 key=value;而 YAML 使用縮進(jìn)和換行來表示數(shù)據(jù)結(jié)構(gòu)
<2>數(shù)據(jù)類型:Properties 中的值只能是字符串類型;而 YAML 支持多種數(shù)據(jù)類型,例如字符串、整數(shù)、浮點數(shù)、布爾值、日期等
<3>復(fù)雜度:Properties 的數(shù)據(jù)結(jié)構(gòu)相對簡單,通常用于存儲簡單的配置信息;而 YAML 支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu),例如列表、嵌套結(jié)構(gòu)等,更適合存儲較為復(fù)雜的數(shù)據(jù)
<4>可讀性:由于 YAML 使用縮進(jìn)和換行進(jìn)行格式化,具有很好的可讀性和易用性,更容易被人類閱讀和編輯;而 Properties 的格式相對簡單,不夠直觀
6、設(shè)置不同創(chuàng)建環(huán)境的配置文件
此處問就來使用一套配置文件,這里使用yml這套配置文件,這里就將properties配置文件刪除或者注釋掉(同時對應(yīng)的類也需要稍微做已處理)
針對不同平臺需要端口號不同?
例如:
開發(fā)環(huán)境:需要使用端口號為 9090
測試環(huán)境:需要使用端口號位 8090
?就以這兩個環(huán)境來解釋 ,現(xiàn)在每一個環(huán)境就需要一個配置文件,那就分別創(chuàng)建一個配置文件,同時這里還會有一個主配置文件,主配置文件中不需要設(shè)置端口號,因為不同環(huán)境下有不同的端口號(需要設(shè)置的是不同的內(nèi)容,而相同內(nèi)容不需要設(shè)置),主配置文件是公用的
操作: spring: profiles: active: 文件名可以修改的部分
?我們這里創(chuàng)建的文件看著比較有規(guī)律,實際上只能這么創(chuàng)建,這是一種創(chuàng)建格式
例如: application-dev.yml? 其實只有黑色這部分我們能改,其他都是固定格式,dev也就是創(chuàng)建的名稱
文章來源:http://www.zghlxwxcb.cn/news/detail-429370.html
?注:公共部分放在主配置文件中,只有特殊部分用其他配置文件來表示文章來源地址http://www.zghlxwxcb.cn/news/detail-429370.html
到了這里,關(guān)于Spring Boot配置文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!