前言 SpringBoot核心配置在springboot中有非常重要的作用,我們可是使用核心配置文件進行一些基礎功能的定義,屬性值的註入等。springboot支持兩種格式的核心配置文件,一種是properties和yaml,properties採用傳統的鍵值對方式,但是相比於yaml優先順序更高,y ...
前言
SpringBoot核心配置在springboot中有非常重要的作用,我們可是使用核心配置文件進行一些基礎功能的定義,屬性值的註入等。springboot支持兩種格式的核心配置文件,一種是properties和yaml,properties採用傳統的鍵值對方式,但是相比於yaml優先順序更高,yaml採用採用樹狀結構,使用縮進進行關係判斷。
註解可以說是springboot的一大特點,採用註解極大的簡化了spring的配置問題。
環境搭建
我們採用上篇博客簡單spring initializr方式創建springboot項目,可參考 https://www.cnblogs.com/hjk-airl/p/16081134.html
application.properties和application.yaml
application.properties和application.yaml作用是一樣的,對於不同的人群有不一樣的偏好,可採用不同的方式,看個人喜好。
- 我們在resources文件夾下創建一個application.yaml文件,方便同時對別兩種方式的不同,因為我們在創建項目的時候application.properties已經創建,所以只需要創建yaml就行。
- 步驟(右鍵resources->new->file->輸入application.yaml)一定要是這個文件名,不然springboot不識別,創建完成後可以看到這個文件的圖標和application.properties文件一樣。
springBoot基本系統屬性配置
我們先修改一下埠號看一下,我們知道預設的埠號是8080,我們修改為8081然後運行。
server.port=8081
在這值得註意的是當我們同時存在application.properties和application.yaml時,並且兩者都有內容時,會優先使用properties文件,我們在application.properties文件內容刪除或者註釋掉在application.yaml里輸入
server:
port: 8082
我們可以在配置文件里配置一些基本信息如jdbc的環境變數,和開啟鬆散綁定,開啟什麼什麼緩存的配置等。
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
password: 123456
username: root
我們還可以配置一些自己類的屬性。
我們創建一個Person類,我們在加@ConfigurationProperties時idea可能會爆紅,但是對程式影響,我們可以先在pom.xml裡加一個依賴,如果還爆紅那就把idea關閉在重新打開。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
package com.hjk.springboot01.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component //將Person類作為Bean註入Sprng容器
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
然後在編輯controller類
package com.hjk.springboot01.controller;
import com.hjk.springboot01.pojo.Person;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PersonController {
@Autowired
public Person person;
@GetMapping("/person")
public String getPerson(){
System.out.println(person.toString());
return person.toString();
}
}
最後我們在核心配置文件application.properties或者application.yaml里編寫想要配置的東西,我沒配置Person的屬性。
application.properties
person.name='hjk'
person.address='中國'
application.yaml
還是那個問題,如果你同時存在properties和yaml文件,並且兩者都有同種屬性,那麼會優先使用properties裡面的。
person:
name: hjk
address: hahaha
最後我們訪問當本地url可以在控制台看到輸出。
對比兩種註入方式
對比點 | @Configuration | @Value |
---|---|---|
底層框架 | springboot | spring |
功能 | 批量註入配置文件屬性 | 單個註入 |
setter方法 | 需要 | 不需要 |
複製類型註入 | 支持 | 不支持 |
鬆散綁定 | 支持 | 不支持 |
JSR303數據校驗 | 支持 | 不支持 |
SpEL表達式 | 不支持 | 支持 |
自定義配置
如果使用@PropertySource和@Configuration註解實現,@PropertySource註解可以指定自定義配置文件的名稱,@Configuration註解可以將實現類指定為自定義配置類,如果需要將自定義配置文件中的屬性值註入實體類屬性,可以使@ConfigurationProperties或@Value註入屬性值
- 自定義配置文件,我們創建文件My.properties
並且在裡面輸入
my.name=hjk
my.address=hehehe
修改Person類
package com.hjk.springboot01.pojo;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
@Configuration
@PropertySource("classpath:My.properties")
@EnableConfigurationProperties(Person.class)
@ConfigurationProperties(prefix = "my")
public class Person {
private String name;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
@Configuration | 表示自定義配置類,這個類會作為bean組件添加到spring容器種 |
---|---|
@PropertySource | 指定自定義配置文件的位置和名稱 |
@ConfigurationProperties | 將配置類中以指定開頭的屬性值註入配置類屬性 |
@EnableConfigurationProperties | 開啟配置的屬性註入功能,配合@ConfigurationProperties使用 |
使用Profile進行多環境配置
在實際開發中,應用程式通常需要部署到不同的環境中,比如開發環境、測試環境、生產環境。不同的環境可能需要不同的配置,針對這種情況,顯然手動修改配置文件適應不同開發環境很不現實,這樣我們就可以使用項目的多環境配置。
使用Profile進行多環境配置
使用Profile進行多環境配置命名必須是固定格式。
application-dev.properties
application-test.properties
application-prod.properties
如果想使用上述對應環境的配置文件,需要在全局配置文件里開啟指定的配置文件即可。
有兩種方式:
第一種:在控制台輸入
java -jar xxx.jar --spring.profiles.active=dev
第二種:在application.properties或者yaml中開啟
spring.profiles.active=dev
- 使用註解@Profile進行多環境配置,這裡就不寫了。
總結
主要記錄了springboot的核心配置和相關註解,包括全局配置使用,配置文件屬性值的註入、springboot自定義配置、多環境配置,這些都是需要我們掌握的基本技能。