配置的概念:
Spring Boot是基于約定的,所以很多配置都有默認值,但如果想使用自己的配置替換默認配置的話,就可以使用application.properties或者application.yml(application.yaml)進行配置。
注意配置文件的命名必須是application開頭。
優(yōu)先順序:
在同一級目錄下優(yōu)先級為:properties > yml > yaml
內(nèi)部配置優(yōu)先順序:
-
file:../config/ :當前項目下的/config目錄下直接放的配置文件
-
file:../config/xxx/:當前項目下的/config目錄下的子路徑下放的配置文件
-
file:../ :當前項目的根目錄中的配置文件
-
classpath:/config/:classpath的/config目錄的配置文件
-
classpath:/ :classpath的根目錄的配置文件
java和resources的文件會被打包到classes的目錄
properties和yml實際上會被打包到classpath路徑下
即優(yōu)先級順序如圖:
外部配置優(yōu)先順序:
https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config
properties、xml、yml格式比對:
properties:
server.port=8080
server.address=127.0.0.1
xml:
<server>
<port>8080</port>
<address>127.0.0.1</address>
</server>
yml:
server:
port:8080
address:127.0.0.1
Yaml(yml):
- 大小寫有區(qū)別
- 數(shù)據(jù)前必須有空格(空格數(shù)目無所謂)作為分隔符,否則不識別該數(shù)據(jù)。
- 縮進的空格數(shù)目不重要,但是相同層級的元素要左對齊。
- 注釋的話快捷鍵也是ctrl+/,是#+空格。
- 參數(shù)引用的話用${}包裹起來即可。
對象(map):鍵值對的集合
person:
name: zhangsan
# 行內(nèi)寫法
person: {name: zhangsan}
數(shù)組
address:
- beijing
- shanghai
# 行內(nèi)寫法
address: [beijing,shanghai]
?純量:單個的、不可再分的值。一般都是字符串
msg1: 'hello \n world' # 單引忽略轉義字符
msg2: "hello \n world" # 雙引識別轉義字符
讀取配置內(nèi)容:
@Value
application.yml的對象,用到幾個,就要注入幾個。
application.yml中
server:
port: 8082
name: abc
Person:
name: zhangsan
age: 20
Student:
name: ${name} # 占位符,表示abc那個name會傳輸?shù)竭@里
address:
- beijing
- shanghai
msg1: 'hello \n world' # 不會識別轉義字符
msg2: "hello \n world" # 會識別轉義字符
HelloController中
package com.example.springini.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@Value("${name}")
//和application.yml的鍵值對的鍵要同名,與下一行的私有成員名字無關
private String nname;
@Value("${Person.name}")
private String name2;
@Value("${Person.age}")
private int age;
@Value("${Student.name}")
private String name3;
@Value("${address[0]}")
private String addr;
@Value("${msg1}")
private String msg11;
@Value("${msg2}")
private String msg22;
@RequestMapping("/hello2")
public String hello2()
{
System.out.println(nname);
System.out.println(name2);
System.out.println(name3);
System.out.println(age);
return "hello springboot";
}
@RequestMapping("/hello")
public String hello()
{
System.out.println(addr);
System.out.println(msg11);
System.out.println(msg22);
return "hello springboot";
}
}
@Autowired+Environment
將application.yml一次性作為一個對象全都注入。
HelloController中
package com.example.springini.controller;
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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController_by_environment {
@Autowired
private Environment env;
@RequestMapping("/hello")
public void hello()
{
System.out.println(env.getProperty("name"));
System.out.println(env.getProperty("Person.name"));
System.out.println(env.getProperty("address[0]"));
System.out.println(env.getProperty("msg1"));
System.out.println(env.getProperty("msg2"));
}
}
@Autowired+ConfigurationProperties
將配置內(nèi)容與對象相互綁定。
新建Person類中
package com.example.springini;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component //表示這個Person類被識別成Bean
@ConfigurationProperties(prefix = "person")
//如果不指定prefix為person,那么它不一定找到配置文件的person底下的兩個字段name和age
//而可能去找到單獨的兩個字段name和age。
public class Person {
private String name;//命名必須和yml文件中的鍵值對的鍵保持一致
private int age;
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;
}
}
HelloController中
package com.example.springini.controller;
import com.example.springini.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController_by_ConfigurationProperties {
@Autowired
private Person p;
@RequestMapping("/hello")
public void hello()
{
System.out.println(p.getName()+" : "+p.getAge());
}
}
profile(動態(tài)配置切換):
我們在開發(fā)Spring Boot應用時,通常同一套程序會被安裝到不同環(huán)境,比如:開發(fā)、測試、生產(chǎn)等。其中數(shù)據(jù)庫地址、服務器端口等等配置都不同,如果每次打包時,都要修改配置文件,那么非常麻煩。profile功能就是來進行動態(tài)配置切換的。
配置方式:
多profile文件方式
- application-dev.properties/yml? 開發(fā)環(huán)境
- application-test.properties/yml? 測試環(huán)境
- application-pro.properties/yml? ?生產(chǎn)環(huán)境
yml多文檔方式
在yml中使用----分隔不同配置
激活方式:
配置文件
在配置文件中配置:spring.profiles.active=dev
虞擬機參數(shù)
在VM options指定:-Dspring.profiles.active=dev文章來源:http://www.zghlxwxcb.cn/news/detail-691325.html
命令行參數(shù)
java-jar xxx.jar --spring.profiles.active=dev文章來源地址http://www.zghlxwxcb.cn/news/detail-691325.html
到了這里,關于springboot之一:配置文件(內(nèi)外部配置優(yōu)先順序+properties、xml、yaml基礎語法+profile動態(tài)切換配置、激活方式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!