新聞中心
摘要: 原創(chuàng)出處 www.bysocket.com 「泥瓦匠BYSocket 」歡迎轉(zhuǎn)載,保留摘要,謝謝!
『 倉(cāng)廩實(shí)而知禮節(jié),衣食足而知榮辱 – 管仲 』

創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)由有經(jīng)驗(yàn)的網(wǎng)站設(shè)計(jì)師、開(kāi)發(fā)人員和項(xiàng)目經(jīng)理組成的專(zhuān)業(yè)建站團(tuán)隊(duì),負(fù)責(zé)網(wǎng)站視覺(jué)設(shè)計(jì)、用戶(hù)體驗(yàn)優(yōu)化、交互設(shè)計(jì)和前端開(kāi)發(fā)等方面的工作,以確保網(wǎng)站外觀精美、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)易于使用并且具有良好的響應(yīng)性。
本文提綱 一、自動(dòng)配置 二、自定義屬性 三、random.* 屬性 四、多環(huán)境配置
運(yùn)行環(huán)境:JDK 7 或 8,Maven 3.0+
技術(shù)棧:SpringBoot 1.5+
一、自動(dòng)配置
Spring Boot 提供了對(duì)應(yīng)用進(jìn)行自動(dòng)化配置。相比以前 XML 配置方式,很多顯式方式申明是不需要的。二者,大多數(shù)默認(rèn)的配置足夠?qū)崿F(xiàn)開(kāi)發(fā)功能,從而更快速開(kāi)發(fā)。 什么是自動(dòng)配置? Spring Boot 提供了默認(rèn)的配置,如默認(rèn)的 Bean ,去運(yùn)行 Spring 應(yīng)用。它是非侵入式的,只提供一個(gè)默認(rèn)實(shí)現(xiàn)。 大多數(shù)情況下,自動(dòng)配置的 Bean 滿(mǎn)足了現(xiàn)有的業(yè)務(wù)場(chǎng)景,不需要去覆蓋。但如果自動(dòng)配置做的不夠好,需要覆蓋配置。比如通過(guò)命令行動(dòng)態(tài)指定某個(gè) jar ,按不同環(huán)境啟動(dòng)(這個(gè)例子在第 4 小節(jié)介紹)。那怎么辦?這里先要考慮到配置的優(yōu)先級(jí)。
Spring Boot 不單單從 application.properties 獲取配置,所以我們可以在程序中多種設(shè)置配置屬性。按照以下列表的優(yōu)先級(jí)排列: 1.命令行參數(shù) 2.java:comp/env 里的 JNDI 屬性 3.JVM 系統(tǒng)屬性 4.操作系統(tǒng)環(huán)境變量 5.RandomValuePropertySource 屬性類(lèi)生成的 random.* 屬性 6.應(yīng)用以外的 application.properties(或 yml)文件 7.打包在應(yīng)用內(nèi)的 application.properties(或 yml)文件 8.在應(yīng)用 @Configuration 配置類(lèi)中,用 @PropertySource 注解聲明的屬性文件 9.SpringApplication.setDefaultProperties 聲明的默認(rèn)屬性
可見(jiàn),命令行參數(shù)優(yōu)先級(jí)最高。這個(gè)可以根據(jù)這個(gè)優(yōu)先級(jí),可以在測(cè)試或生產(chǎn)環(huán)境中快速地修改配置參數(shù)值,而不需要重新打包和部署應(yīng)用。 還有第 6 點(diǎn),根據(jù)這個(gè)在多 moudle 的項(xiàng)目中,比如常見(jiàn)的項(xiàng)目分 api 、service、dao 等 moudles,往往會(huì)加一個(gè) deploy moudle 去打包該業(yè)務(wù)各個(gè)子 moudle,應(yīng)用以外的配置優(yōu)先。
二、自定義屬性
泥瓦匠喜歡按著代碼工程來(lái)講解知識(shí)。git clone 下載工程 springboot-learning-example ,項(xiàng)目地址見(jiàn) GitHub – https://github.com/JeffLi1993/springboot-learning-example。
a. 編譯工程
在項(xiàng)目根目錄 springboot-learning-example,運(yùn)行 maven 指令:
cd springboot-learning-example
mvn clean installb. 運(yùn)行工程 test 方法
運(yùn)行 springboot-properties 工程 org.spring.springboot.property.PropertiesTest 測(cè)試類(lèi)的 getHomeProperties 方法??梢栽诳刂婆_(tái)看到輸出,這是通過(guò)自定義屬性獲取的值:
HomeProperties{province='ZheJiang', city='WenLing', desc='dev: I'm living in ZheJiang WenLing.'}怎么定義自定義屬性呢?
首先項(xiàng)目結(jié)構(gòu)如下:
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── org
│ │ └── spring
│ │ └── springboot
│ │ ├── Application.java
│ │ └── property
│ │ ├── HomeProperties.java
│ │ └── UserProperties.java
│ └── resources
│ ├── application-dev.properties
│ ├── application-prod.properties
│ └── application.properties
└── test
├── java
│ └── org
│ └── spring
│ └── springboot
│ └── property
│ ├── HomeProperties1.java
│ └── PropertiesTest.java
└── resouorces
└── application.yml在 application.properties 中對(duì)應(yīng) HomeProperties 對(duì)象字段編寫(xiě)屬性的 KV 值:
## 家鄉(xiāng)屬性 Dev
home.province=ZheJiang
home.city=WenLing
home.desc=dev: I'm living in ${home.province} ${home.city}.這里也可以通過(guò)占位符,進(jìn)行屬性之間的引用。
然后,編寫(xiě)對(duì)應(yīng)的 HomeProperties Java 對(duì)象:
/**
* 家鄉(xiāng)屬性
*
* Created by bysocket on 17/04/2017.
*/
@Component
@ConfigurationProperties(prefix = "home")
public class HomeProperties {
/**
* 省份
*/
private String province;
/**
* 城市
*/
private String city;
/**
* 描述
*/
private String desc;
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
@Override
public String toString() {
return "HomeProperties{" +
"province='" + province + '\'' +
", city='" + city + '\'' +
", desc='" + desc + '\'' +
'}';
}
}通過(guò) @ConfigurationProperties(prefix = “home”) 注解,將配置文件中以 home 前綴的屬性值自動(dòng)綁定到對(duì)應(yīng)的字段中。同是用 @Component 作為 Bean 注入到 Spring 容器中。
如果不是用 application.properties 文件,而是用 application.yml 的文件,對(duì)應(yīng)配置如下:
## 家鄉(xiāng)屬性
home:
province: 浙江省
city: 溫嶺松門(mén)
desc: 我家住在${home.province}的${home.city}鍵值對(duì)冒號(hào)后面,必須空一格。
注意這里,就有一個(gè)坑了: application.properties 配置中文值的時(shí)候,讀取出來(lái)的屬性值會(huì)出現(xiàn)亂碼問(wèn)題。但是 application.yml 不會(huì)出現(xiàn)亂碼問(wèn)題。原因是,Spring Boot 是以 iso-8859 的編碼方式讀取 application.properties 配置文件。
注意這里,還有一個(gè)坑: 如果定義一個(gè)鍵值對(duì) user.name=xxx ,這里會(huì)讀取不到對(duì)應(yīng)寫(xiě)的屬性值。為什么呢?Spring Boot 的默認(rèn) StandardEnvironment 首先將會(huì)加載 “systemEnvironment” 作為首個(gè)PropertySource. 而 source 即為System.getProperties().當(dāng) getProperty時(shí),按照讀取順序,返回 “systemEnvironment” 的值.即 System.getProperty(“ user.name“) (Mac 機(jī)子會(huì)讀自己的登錄賬號(hào),這里感謝我的死黨 http://rapharino.com/)
三、random.* 屬性
Spring Boot 通過(guò) RandomValuePropertySource 提供了很多關(guān)于隨機(jī)數(shù)的工具類(lèi)。概括可以生成隨機(jī)字符串、隨機(jī) int 、隨機(jī) long、某范圍的隨機(jī)數(shù)。
運(yùn)行 springboot-properties 工程 org.spring.springboot.property.PropertiesTest 測(cè)試類(lèi)的 randomTestUser 方法。多次運(yùn)行,可以發(fā)現(xiàn)每次輸出不同 User 屬性值:
UserProperties{id=-3135706105861091890, age=41, desc='泥瓦匠叫做3cf8fb2507f64e361f62700bcbd17770', uuid='582bcc01-bb7f-41db-94d5-c22aae186cb4'}application.yml 方式的配置如下( application.properties 形式這里不寫(xiě)了):
## 隨機(jī)屬性
user:
id: ${random.long}
age: ${random.int[1,200]}
desc: 泥瓦匠叫做${random.value}
uuid: ${random.uuid}四、多環(huán)境配置
很多場(chǎng)景的配置,比如數(shù)據(jù)庫(kù)配置、Redis 配置、注冊(cè)中心和日志配置等。在不同的環(huán)境,我們需要不同的包去運(yùn)行項(xiàng)目。所以看項(xiàng)目結(jié)構(gòu),有兩個(gè)環(huán)境的配置:
application-dev.properties:開(kāi)發(fā)環(huán)境
application-prod.properties:生產(chǎn)環(huán)境Spring Boot 是通過(guò) application.properties 文件中,設(shè)置 spring.profiles.active 屬性,比如 ,配置了 dev ,則加載的是 application-dev.properties :
# Spring Profiles Active
spring.profiles.active=dev那運(yùn)行 springboot-properties 工程中 Application 應(yīng)用啟動(dòng)類(lèi),從控制臺(tái)中可以看出,是加載了 application-dev.properties 的屬性輸出:
HomeProperties{province='ZheJiang', city='WenLing', desc='dev: I'm living in ZheJiang WenLing.'}將 spring.profiles.active 設(shè)置成 prod,重新運(yùn)行,可得到 application-prod.properties的屬性輸出:
本文名稱(chēng):后浪去Spring教程:SpringBoot配置文件
瀏覽路徑:http://www.dlmjj.cn/article/cdjjgdd.html


咨詢(xún)
建站咨詢(xún)
