前言
為了 Spring Boot 能夠更好地生成配置元資料檔案,我們可以在創建專案時添加 Spring Configuartion Processor 依賴,或者在創建好專案后的 pom.xml 檔案中手動添加,添加該依賴后,我們在撰寫配置時就會有屬性提示,大大降低撰寫錯誤,
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
application.properties
自定義屬性
application.properties 組態檔是創建專案后就自帶的,如果我們要自定義屬性,可以在其中直接配置,配置程序如下:
- 在
application.properties中添加我們要自定義的配置;
cunyu.id=1024
cunyu.name=村雨遙
cunyu.website=https://cunyu1943.github.io
- 創建物體類來映射我們配置的屬性;
package com.cunyu.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author : cunyu
* @version : 1.0
* @className : CunyuProperties
* @date : 2020/7/29 13:34
* @description : TODO
*/
@Component
@ConfigurationProperties(prefix = "cunyu")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CunyuProperties {
private int id;
private String name;
private String website;
}
- 定義 Controller 來注入測驗;
package com.cunyu.controller;
import com.cunyu.pojo.CunyuProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author : cunyu
* @version : 1.0
* @className : CunyuPropertiesController
* @date : 2020/7/29 13:37
* @description : TODO
*/
@RestController
@RequestMapping("/cunyu")
public class CunyuPropertiesController {
private static final Logger logger = LoggerFactory.getLogger(CunyuPropertiesController.class);
@Autowired
CunyuProperties cunyuProperties;
@GetMapping("/profile")
public String cunyuProfile(){
logger.info("---------------");
logger.info(cunyuProperties.toString());
logger.info("---------------");
return cunyuProperties.toString();
}
}
- 打開網頁測驗,打開 1,同時觀察控制臺,顯示如下內容則說明屬性注入成功;


多環境配置
實際開發程序中,常常需要多個環境(如 開發、測驗、生產等),而不同環境的配置都不一樣,此時配置方法如下;
- 創建不同環境對應的組態檔,組態檔名為
application-{profile}.properties,{profile}為我們自定義環境,如下:
開發環境:application-dev.properties
server.servlet.context-path=/dev
測驗環境:application-test.properties
server.servlet.context-path=/test
生產環境:application-prod.properties
server.servlet.context-path=/prod
- 然后在
application.properties中加入激活的環境,此時就會激活對應環境的配置;
# {profile} 對應上述的 dev、test、prod
spring.profiles.active={profile}
之所以要分為多個環境的配置,主要是方便在不同環境中開發的需求,比如我們要開發新功能,那此時就可以激活開發組態檔的相關設定,等待我們開發完成之后,然后再切換到測驗環境進行測驗,而經過嚴格的測驗之后,我們就可以將新推出的功能上線到生產環境中,縱觀整個開發流程,我們既完成了新功能的開發,也沒有影響到用戶對現有系統的使用,所以現在大家基本都是基于這種模式來進行業務開發,
自定義組態檔
假如我們不想用專案自帶的 application.properties 配置環境,那我們也可以自定義我們需要的配置,但該如何配置呢?接下來我們就來看看 ~
- 首先創建一個自定義組態檔
my.properties,檔案名可以自定義,但是后綴要保持一致,然后在其中加入我們自定義配置的屬性;
my.id=1024
my.name=村雨遙
my.website=https://cunyu1943.github.io
- 定義物體類,用于映射自定義組態檔中的內容;
package com.cunyu.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
/**
* @author : cunyu
* @version : 1.0
* @className : MyProperties
* @date : 2020/7/29 14:05
* @description : TODO
*/
@Component
@PropertySource("classpath:my.properties")
@ConfigurationProperties(prefix = "my")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyProperties {
private int id;
private String name;
private String website;
}
- 定義 Controller 來注入測驗
package com.cunyu.controller;
import com.cunyu.pojo.MyProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author : cunyu
* @version : 1.0
* @className : MyPropertiesController
* @date : 2020/7/29 14:07
* @description : TODO
*/
@RestController
@RequestMapping("/my")
public class MyPropertiesController {
private static final Logger logger = LoggerFactory.getLogger(MyPropertiesController.class);
@Autowired
MyProperties myProperties;
@GetMapping("/profile")
public String myProfile() {
logger.info("=============");
logger.info(myProperties.toString());
logger.info("=============");
return myProperties.toString();
}
}
- 打開網頁測驗,打開
http://localhost:8080/my/profile,同時觀察控制臺,顯示如下內容則說明屬性注入成功;


注意
application.properties 和 my.properties 會優先加載 application.properties,
.yml 和 .properties
一般來說,使用 IDEA 創建一個 Spring Boot 專案時,默認都會生成一個 application.properties 的組態檔,該組態檔是用來 修改 Spring Boot 自動配置的默認值, 但有的朋友會更傾向于使用 application.yml,那么問題來了,這兩種格式到底有啥區別呢?
開始比較之前,我們先來看看各自的實體:
- .properties 格式
server.port=8081
spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.datasource.url=jdbc:mysql://aliyuncs.com:3306/database?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true
spring.datasource.username=root
spring.datasource.password=******
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
- .yml 格式
server:
port: 8082
spring:
datasource:
name: test
url: jdbc:mysql://127.0.0.1:3306/database
username: root
password: ******
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
從上面的實體我們可以發現,兩者的區別主要有以下幾點:
- 語法結構
-
.properties格式使用的是 鍵值對形式(key=value),而.yml格式則使用的是 樹狀結構(key: value); -
.properties格式通過.來連接,=來賦值,結構上比較直接,而.yml格式則使用:來分層,結構上呈現樹狀結構,層次感明顯,而且賦值時:的后邊必須 接著一個空格再賦值
- 執行先后順序
如果一個工程中同時存在兩種格式的檔案,那么會 優先加載 .yml 檔案,然后再加載 .properties,而且后加載的 .properties 會覆寫之前加載的 .yml 檔案,
此外,.yml 配置時需要注意以下幾點:
- 縮進必須用空格,不能用 Tab
@PropertySource注解不能加載yml檔案
總結
以上就是關于 Spring Boot 中的配置相關內容了,本文主要介紹了 Spring Boot 專案自帶的組態檔的相關資訊,同時也介紹了如果我們想要滿足自己需求如何進行自定義配置,最后,則是對 .yml 和 .properties 不同格式的組態檔的區別進行解釋,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/305181.html
標籤:java
上一篇:??半口氣干完 “絲襪哥“ ,肝了一套Swagger3 API檔案視頻教程,直呼 666~??
下一篇:微信小程式入門
