1. 程式人生 > 其它 >springboot map資料型別注入_SpringBoot之yaml配置注入

springboot map資料型別注入_SpringBoot之yaml配置注入

技術標籤:springboot map資料型別注入springboot 獲取application引數springboot獲取yml的值yaml 陣列yml配置map型別的資料注入失敗

aa86bb882ce0bd62c3289921ede75c37.png

點選藍字之後,我們就是好朋友了啦

8b3eac96c5062a03de63aceec490a0b5.png

一個努力中的公眾號

長的好看的人都關注了

60f0d52af8f4f6d29466eda7bf7d680f.png

YAML概述

YAML(YAML Ain't Markup LanguageYAML不是一個標記語言)的縮寫。在開發這種語言時,YAML的意思其實是:YAML A Markup Language(仍是一種標記語言)

這種語言是以資料作為中心,而不是以標記語言為重點!

標記語言:以前的配置檔案;大多都使用的是 xxxx.xml檔案;

YAML:以資料為中心,比json、xml等更適合做配置檔案;

SpringBoot配置檔案的載入有先後順序:

載入先後順序:

1.application.yml
2.application.yaml
3.application.properoties
後加載的會把先載入的給覆蓋掉,也就是後面的配置會覆蓋前面的配置。

1、YAML基本語法

  • 使用縮排表示層級關係

  • 縮排時不允許使用Tab鍵,只允許使用空格

  • 縮排的空格數目不重要,只要相同層級的元素左側對齊即可

  • 大小寫敏感

2、YAML 支援的三種資料結構

  • 物件:鍵值對的集合

  • 陣列:一組按次序排列的值

  • 字面量:單個的、不可再分的值

YAML配置舉例:

//物件(Map)的寫法people:id: 123age: 22name: "jason"//陣列的寫法,一組連詞線(-)開頭的行,構成一個數組-name: sprinboot yamlstatus: 2license: MITlanguage: java
可以任意的組合,只要符合語法規範即可。
---------------------------------
字面量
•數字、字串、布林、日期
•字串
–預設不使用引號
–可以使用單引號或者雙引號,單引號會轉義特殊字元
–字串可以寫成多行,從第二行開始,必須有一個單空格縮排。換行符會被轉為空格。
–文件
•多個文件用---隔開
#普通資料的配置(冒號之後要有空格)
name: jason
#物件的配置
person:
name: jason
age:22
addr:chengdu
#物件的行內配置(行內物件冒號之後也要有空格)
person: {name: jason,age: 18,addr: chengdu}

#配置資料、集合(配置普通字串),記得中間加空格
city:
- beijing
- tianjin
- shanghai
- chongqing
#或者是行內配置
city: [beijing,tianjin,shanghai,chongqing]

#配置物件資料,一個 - 代表一個物件
person:
- name: tom
age: 18
addr: beijing
- name: lucy
age: 17
addr: shanghai
#或者是行內配置
person: [{name: tom,age: 18,addr: beijing},{name: lucy,age: 17,addr: shanghai}]

#配置Map集合
map:
key1: value1
key2: value2

注意:SpringBoot使用snakeyaml解析yml檔案;https://bitbucket.org/asomov/snakeyaml/wiki/Documentation#markdown-header-yaml-syntax參考語法

配置檔案值注入到元件中

@Value@ConfigurationProperties為屬性注值區別

Feature@ConfigurationProperties@Value
Relaxed bindingyesno
Meta-data suportyesno
SpEL evaluationnoyes

使用@Value註解從配置檔案中獲取值

@Controller
public class GetParamWithYml {
@Value("${person.name}")//通過@Value註解來獲取yml配置檔案中的值
String name;
@Value("${city.[0]}") //陣列還是以陣列下標來進行取值
String cityname;
@Value("${people.[0].age}")
int age;
@Value("${people.[0].name}") //獲取陣列物件裡面的值
String peoplename;
@Value("${hellomap.value2}") //獲取map物件的值
String v2;

@RequestMapping("/getinfo")
@ResponseBody
public String print() {
System.out.println(name);
System.out.println(age);
System.out.println(peoplename);
System.out.println(v2);
returnname+ cityname;
}
}

YAML檔案中的配置

/yml配置檔案中的配置
#普通物件的配置
person:
name: jason
age: 22
addr: chengdu
#普通字面量的配置
name: hellojason
#配置陣列,集合等資訊
city:
- beijing
- tinajing
- guangzhou
- xian
#配置物件資料
people:
- name: tom
age: 22
- name: lucy
age: 23
#配置map物件
hellomap:
value1: v1
value2: v2

通過@ConfigurationProperties編寫配置類進行注入

/*
* person的配置類,從yml配置檔案中獲取值
*/
@ConfigurationProperties(prefix = "person")
@Component//將這個配置類註冊為容器元件
publicclassPersonConf{
String name;
intage;
String addr;
setter/getter方法
}

//獲取配置檔案的控制器
@RestController
publicclassPersonConfController{
@Autowired//將配置類自動注入進來
privatePersonConf personConf;

@RequestMapping("/getconfInfo")
publicString getInfo(){
String name = personConf.getName();
intage = personConf.getAge();
System.out.println(age);
returnname;
}
}

yaml支援多文件塊方式,多個Profile檔案

我們在主配置檔案編寫的時候,檔名可以是 application-{profile}.properties/yml預設使用application.properties的配置;使用時可以啟用想使用的配置檔案,比較靈活。

例如:

server:
port: 8081
spring:
profiles:
active: prod
‐‐‐##使用-號表示多文件塊
server:
port: 8083
spring:
profiles: dev
‐‐‐
server:
port: 8084
spring:
profiles: prod #指定屬於哪個環境

啟用指定profile

1、在配置檔案中指定 spring.profiles.active=dev2、命令列:java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;可以直接在測試的時候,配置傳入命令列引數3、虛擬機器引數;-Dspring.profiles.active=dev

配置檔案的載入順序

springboot 啟動會掃描以下位置的application.properties或者application.yml檔案作為Spring boot的預設配置文

–file:./config/
–file:./
–classpath:/config/
–classpath:/
優先順序由高到底,高優先順序的配置會覆蓋低優先順序的配置;

SpringBoot會從這四個位置全部載入主配置檔案;互補配置;所謂互補配置,就是說如果你的這配置檔案中沒有配置 ,而在另一個配置檔案配置了,那麼將會綜合在一個然後生效。

可以通過spring.config.location來改變預設的配置檔案位置

專案打包好以後,我們可以使用命令列引數的形式,啟動專案的時候來指定配置檔案的新位置;指定配置檔案和預設載入的這些配置檔案共同起作用形成互補配置;例如:
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties