SpringBoot支持外部化配置,配置文件格式以下所示:html
properties filesjava
yaml filesspring
environment variablesjson
command-line argumentsspringboot
使用外部化配置方式:session
@Value註解
app
Environment抽象
(Spring環境接口抽象)dom
@ConfigurationProperties
ide
PropertySource
(文件屬性抽象)spring-boot
POM內容以下
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--生成spring-configuration-metadata.json文件,提示屬性-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
當使用Spring Boot開發項目時,Spring Boot會默認讀取classpath下application.properties
application.yml
文件,詳情請查看源碼ConfigFileApplicationListener
。這種自定義少許
屬性經常經過@Value
註解進行加載,可是@Value
所在類必須在Spring IOC容器
中。
application.yml自定義屬性
hello
讀取該屬性經常經過@Value
註解進行讀取。
@Value註解注入使用狀況
轉載自:<https://www.cnblogs.com/wangbin2188/p/9014837.html>
注入普通字符串
注入操做系統屬性
注入表達式結果
注入其餘Bean屬性
注入文件資源
注入URL資源
注入${...}來處理placeholder。
當有許多配置屬性(建議超過5這樣),
能夠將這些屬性做爲字段來建立一個JavaBean,並將屬性賦給他們。例如
在application.yml
配置屬性以下:
person
配置屬性類PersonProperties
@ConfigurationProperties
註解是將properties配置文件轉換爲bean使用,默認是將application.yml
或者application.properties屬性轉換成bean使用。@PropertySource
只支持properties結尾的文件。
@EnableConfigurationProperties
註解的做用是@ConfigurationProperties
註解生效,並將屬性
配置類註冊到Spring IOC容器中。 若是須要加載指定配置文件,可使用@PropertySource
註解。
上面介紹了讀取默認配置文件application.yml|application.properties中的配置屬性。固然,咱們也能夠讀取
自定義的配置文件中屬性
。目前官方使用@PropertySource
註解導入自定義的配置文件屬性。
創建hello.properties
#load config properties
person.name=劉恩源
person.age=20
person.school=天津師範大學
創建PersonProperties.java
//創建聲明加載properties配置文件的encoding和name
創建PersonConfiguration,使用@EnableConfigurationProperties
激活@ConfigurationProperties
註解,將其標註的JavaBean注入到Spring IOC容器中。
加載指定yml|yaml文件
配置以下:
public class YamlPropertiesConfiguration {
能夠參照我實現的自定義註解@YmlPropertySource
,加載yml|yaml文件,能夠大體實現和@PropertySource
註解一樣的功能。
@YmlPropertySource實現加載yml|yaml文件
在企業開發環境中,須要不一樣的配置環境.SpringBoot使用spring.profiles.active
屬性加載不一樣環境的配置文件,配置文件格式爲application-{profile}.properties|yml|yaml。{profile}對應環境標識。
application-test.yml:測試環境
application-dev.yml:開發環境
application.prod:生產環境
能夠在springboot默認配置文件application.yml經過配置spring.profiles.active
激活環境。也能夠在
特定的類使用@Profile
註解激活環境。該註解可使用邏輯運算符。
特點 | @ConfigurationProperties | @Value |
---|---|---|
寬鬆綁定 | YES | NO |
元數據支持 | YES | NO |
SpEL表達式 | NO | YES |
能夠經過提供ConversionService bean(Bean的名字爲conversionService)
,或者註冊屬性修改器
(經過CustomEditorConfigure
bean)或者Converters(帶有標記註解的@ConfigurationPropertiesBinding BeanDefinition)。
時間轉換(Duration
),查看java.util.Duration(since jdk1.8)
。
示例以下:
經過JavaBean形式
/**
* 類描述:
*
* @author liuenyuan
* @date 2019/6/17 17:36
* @describe
* @see java.time.Duration
* @see org.springframework.boot.convert.DurationUnit
* @see ChronoUnit
*/
經過配置文件形式:application.yml
app
其他時間配置形式:
ns(納秒)
us(微妙)
ms(毫秒)
s(秒)
m(分)
h(時)
d(天)
Data Sizes轉換(數據大小),查看DataSize(spring5.1支持),@DataSizeUnit
示例以下:
經過JavaBean形式
經過配置文件application.properties
app
其他數據大小配置:
B(bytes)
KB
MB
GB
TB