SpringBoot是為了簡化Spring應用的創建、運行、調試、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規范,引入相關的依賴就可以輕易的搭建出一個 WEB 工程。
一、准備前提
為了讓SpringBoot更好的生成數據,我們需要添加如下依賴(該依賴可以不添加,但是在 IDEA 不會有屬性提示),該依賴只會在編譯時調用,所以不用擔心會對生產造成影響…
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
二、自定義屬性配置
SpringBoot 主配置文件默認為
application.yml
或者application.properties
,我更喜歡用前者,所以文章中基本以第一種為例讀取自定義屬性
2.1 application.yml
自定義屬性
server:
port: 8081
original:
config:
title: OriginalConfig
description: 主配置文件中屬性
2.2 新建OriginalConfig
配置類
該配置類用來映射我們在
application.yml
中的內容,這樣一來我們就可以通過操作對象的方式來獲得配置文件的內容了。
@Data
@Component
public class OriginalConfig {
/**
* 注入 application.yml 配置
*
*/
@Value("${original.config.title}")
private String title;
@Value("${original.config.description}")
private String description;
}
這里,可以采用
@ConfigurationProperties
簡化@Value
注入值的寫法,詳見文末Github源碼寫法。
2.3 ConfigTest.java
測試
2.3.1 測試方法testOriginalConfig
@Autowired
OriginalConfig originalConfig;
/**
* 讀取自定義屬性
*/
@Test
public void testOriginalConfig() {
System.out.println("開始讀取 application.yml 的自定義屬性:");
System.out.println("讀取配置信息:");
System.out.println("title: " + originalConfig.getTitle());
System.out.println("desc: " + originalConfig.getDescription());
System.out.println("application.yml 文件的屬性讀取完畢!");
}
2.3.2 控制台打印如下:
開始讀取 application.yml 的自定義屬性:
讀取配置信息:
title: OriginalConfig
desc: 主配置文件中屬性
application.yml 文件的屬性讀取完畢!
三、自定義文件配置
3.1 定義一個名為myConfig.properties
的自定義文件
自定義配置文件的命名不強制application開頭
customize.config.title=CustomizeConfig
customize.config.description=自定義配置文件中屬性
3.2 新建CustomizeConfig
配置類
該配置類用來映射我們在
myConfig.properties
中的內容,這樣一來我們就可以通過操作對象的方式來獲得配置文件的內容了。
@Data
@Component
@PropertySource(value = "classpath:myConfig.properties", encoding = "utf-8")
public class CustomizeConfig {
/**
* 注入 myConfig.properties 配置
*
*/
@Value("${customize.config.title}")
private String title;
@Value("${customize.config.description}")
private String description;
}
@PropertySource
:配置文件路徑和編碼格式
2.3 單元測試
@Autowired
CustomizeConfig customizeConfig;
/**
* 從 myConfig.properties 獲取配置
*/
@Test
public void testCustomizeConfig() {
System.out.println("開始讀取 myConfig.properties 文件的屬性:");
System.out.println("title: " + customizeConfig.getTitle());
System.out.println("desc: " + customizeConfig.getDescription());
System.out.println("myConfig.properties 文件的屬性讀取完畢!");
}
- 控制台打印如下:
開始讀取 myConfig.properties 文件的屬性:
title: CustomizeConfig
desc: 自定義配置文件中屬性
myConfig.properties 文件的屬性讀取完畢!
三、多環境化配置
真實的應用中,常常會有多個環境(如:本地,開發,測試,正式),不同的環境數據庫連接都不一樣,這個時候就需要用到
spring.profile.active
,它的格式為application-{profile}.yml
,這里的application
為前綴不能改,{profile}
是我們自己定義的。
3.1 指定不同環境的路徑
通過
server.servlet.context-path
將不同環境指定不同的路徑。
application-local.yml
title: local配置文件
server:
servlet:
context-path: /local
application-daily.yml
title: daily配置文件
server:
servlet:
context-path: /daily
application-gray.yml
title: gray配置文件
server:
servlet:
context-path: /gray
application-production.yml
title: production配置文件
server:
servlet:
context-path: /production
3.2 新增配置類EnvConfig.java
@Data
@Configuration
public class EnvConfig {
@Value("${title}")
private String title;
}
3.3 測試方法
@Autowired
EnvConfig envConfig;
/**
* 從 不同環境配置讀取
*/
@Test
public void testEnvConfig() {
System.out.println("開始讀取 不同環境 文件的屬性:");
System.out.println("title: " + envConfig.getTitle());
System.out.println("myConfig.properties 文件的屬性讀取完畢!");
}
3.4 激活某個環境配置
在application.yml
配置文件中指定環境,例如指定gray
環境:
spring:
profiles:
active: daily
- 控制台打印如下:
開始讀取 不同環境 文件的屬性:
title: gray配置文件
myConfig.properties 文件的屬性讀取完畢!
這里指定不同的環境配置文件,即可訪問到不同環境的配置。
四、源碼地址
https://github.com/vanDusty/SpringBoot-Home/tree/master/springboot-demo-list/springboot-demo-config