SpringBoot yaml語法與數(shù)據(jù)讀取操作詳解
yaml
YAML是一種數(shù)據(jù)序列化格式。
yaml擴展名
- .yaml
- .yml(主流)
yaml語法規(guī)則
- 大小寫敏感
- 屬性層次關(guān)系使用多行描述,每行結(jié)尾使用冒號結(jié)束
- 使用縮進表示層級關(guān)系,同層左側(cè)對齊,只允許使用空格(不允許使用Tab鍵)
- 屬性值前面添加空格(屬性名與屬性值之間使用冒號+空格作為分隔)
- #表示注釋
字面值表示方式:
boolean: true
float: 3.14
int: 15
#表示空
null: ~
string: xiaofeixia
date: 2022-7-9
#日期與時間用T連接
datetime: 2022-7-9T12:00:30+02:00
數(shù)組表示方式:
likes:
- music
- draw
- gamelikes1: [music,draw,game]
對象數(shù)組格式:
user2:
- name: xiaofeixia
age: 22
- name: xiaomage
age: 26user3:
-
name: xiaofeixia
age: 22
-
name: xiaomage
age: 27
對象數(shù)組縮略格式:
user4: [{name:xiaofeixia,age:21},{name:xiaofeixia,age:22}]
讀取yaml數(shù)據(jù)
使用@Value讀取單個數(shù)據(jù),屬性名引用方式:${一級屬性名.二級屬性名}
編寫yaml文件
server:
port: 81
country: china
province: henan
city: zhengzhou
area: shangqiuparty: true
birthday: 2022-11-11user8:
name: xiaofeixia
age: 22
user1:
name: xiaofeixia
age: 22a:
B:
C:
d:
e: abclikes:
- music
- draw
- gamelikes1: [music,draw,game]
user2:
- name: xiaofeixia
age: 22
- name: xiaomage
age: 26user3:
-
name: xiaofeixia
age: 22
-
name: xiaomage
age: 27user4: [{name:xiaofeixia,age:21},{name:xiaofeixia,age:22}]
讀取單一數(shù)據(jù)
package com.jkj.controller; import com.jkj.MyDataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/yamlBooks") public class BookController { //讀取yaml數(shù)據(jù)中的單一數(shù)據(jù) @Value("${country}") public String country1; @GetMapping public String ById(){ System.out.println("springboot is running..."); System.out.println("country=="+country1); //country==china return "springboot is running..."; } }
讀取二級數(shù)據(jù)
package com.jkj.controller; import com.jkj.MyDataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/yamlBooks") public class BookController { @Value("${user8.name}") public String username; @GetMapping public String ById(){ System.out.println("springboot is running..."); System.out.println("username=="+username); //username==xiaofeixia return "springboot is running..."; } }
讀取數(shù)組數(shù)據(jù)
package com.jkj.controller; import com.jkj.MyDataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/yamlBooks") public class BookController { @Value("${likes[0]}") public String likes1; @GetMapping public String ById(){ System.out.println("springboot is running..."); System.out.println("likes1=="+likes1); //likes1==music return "springboot is running..."; } }
讀取服務(wù)器端口號
package com.jkj.controller; import com.jkj.MyDataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/yamlBooks") public class BookController { @Value("${server.port}") public String port; @GetMapping public String ById(){ System.out.println("springboot is running..."); System.out.println("port=="+port); //port==81 return "springboot is running..."; } }
讀取對象屬性
package com.jkj.controller; import com.jkj.MyDataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/yamlBooks") public class BookController { @Value("${user2[0].age}") public String age2; @GetMapping public String ById(){ System.out.println("springboot is running..."); System.out.println("age2=="+age2); //age2==22 return "springboot is running..."; } }
封裝全部數(shù)據(jù)到Environment對象
package com.jkj.controller; import com.jkj.MyDataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/yamlBooks") public class BookController { @Autowired private Environment env; @GetMapping public String ById(){ System.out.println(env.getProperty("server.port")); System.out.println(env.getProperty("user8.name")); return "springboot is running..."; } }
讀取yaml引用類型屬性數(shù)據(jù)
application.yml
server:
port: 81
#創(chuàng)建類用于封裝下面的數(shù)據(jù)
#由spring去加載數(shù)據(jù)到對象中,一定要告訴spring加載這組信息
#使用的時候直接從spring中獲取信息
datasource:
driver: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost/springboot
username: root
password: root
MyDataSource
自定義對象封裝指定數(shù)據(jù)
1.定義數(shù)據(jù)模型封裝yaml文件中對應(yīng)的數(shù)據(jù)
package com.jkj; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; //2.定義spring的管控Bean @Component //3.指定加載數(shù)據(jù) @ConfigurationProperties(prefix = "datasource") public class MyDataSource { private String driver; private String url; private String username; private String password; public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "MyDataSource{" + "driver='" + driver + '\'' + ", url='" + url + '\'' + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
讀取數(shù)據(jù)
package com.jkj.controller; import com.jkj.MyDataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/yamlBooks") public class BookController { @Autowired private MyDataSource myDataSource; @GetMapping public String ById(){ System.out.println(myDataSource); //MyDataSource{driver='com.mysql.jdbc.Driver', url='jdbc:mysql://localhost/springboot', username='root', password='root'} return "springboot is running..."; } }
變量的引用
application.yml
server:
port: 81
baseDir: E:\window
tempDir: ${baseDir}\temp
讀取數(shù)據(jù)
package com.jkj.controller; import com.jkj.MyDataSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.env.Environment; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/yamlBooks") public class BookController { @Value("${tempDir}") public String temp; @GetMapping public String ById(){ System.out.println("temp=="+temp); //temp==E:\window\temp return "springboot is running..."; } }
context-path
只寫:
server:
port: 81
控制臺輸出:path為空
加上context-path后:
server:
port: 81
servlet:
context-path: /test
控制臺輸出頁面:
注意:在瀏覽器輸入:http://localhost:81/test/yamlBooks 進行測試。
@Autowired報錯解決方案
- file
- setting
- 搜索Spring Core
- 如下圖所示將Severity修改為Warning
到此這篇關(guān)于SpringBoot yaml語法與數(shù)據(jù)讀取操作詳解的文章就介紹到這了,更多相關(guān)SpringBoot yaml語法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
maven profile自動切換環(huán)境參數(shù)的2種方法詳解
這篇文章主要給大家介紹了關(guān)于maven profile自動切換環(huán)境參數(shù)的2種方法,文中通過示例代碼將這兩種方法介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-04-04詳解Elasticsearch如何實現(xiàn)簡單的腳本排序
Elasticsearch?是位于?Elastic?Stack?核心的分布式搜索和分析引擎,可以為所有類型的數(shù)據(jù)提供近乎實時的搜索和分析。本文主要介紹了Elasticsearch如何實現(xiàn)簡單的腳本排序,感興趣的可以了解一下2023-01-01