前言
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自定義配置、多環境配置,這些都是需要我們掌握的基本技能。