本文提綱
一、默認配置
二、自定義配置(屬性)
三、適配多環境
四、最後
本文運行環境
Ubuntu 16.04 LTS
JDK 8 +
IntelliJ IDEA ULTIMATE 2017.2
Maven 3.5.0
Spring Boot 1.5.8.RELEASE
一、默認配置
Spring Boot
提供了很多默認配置,不需要進行顯示聲明,並且大多數的默認配置已經能滿足實際的開發,節省了很多時間。
通常一個moudle
中的配置文件爲:application.yml
或application.properties
,裏面可以聲明如數據庫連接、tomcat、緩存等等非常多的配置,可根據項目實際需要進行配置。.yml
與.properties
區別僅在於.yml
使用YAML
語法進行書寫,更方便人閱讀,所以本系列文章,均使用.yml
作爲後綴的配置文件。
某些情況下,需要改變配置參數,比如項目運行時進行配置參數修改,需要遵循以下配置優先級:
- 命令行參數
- 來自java:comp/env的JNDI屬性
- Java系統屬性(System.getProperties())
- 操作系統環境變量
- RandomValuePropertySource 屬性類生成的 random.* 屬性
- 應用以外(jar包外部)的 application.yml(或 properties)(帶spring.profile)文件
- 打包在應用內(jar包內部)的 application.yml(或 properties)(帶spring.profile)文件
- 應用以外(jar包外部)的 application.yml(或 properties)(不帶spring.profile)文件
- 打包在應用內(jar包內部)的 application.yml(或 properties)(不帶spring.profile)文件
- @Configuration註解類上的@PropertySource
- SpringApplication.setDefaultProperties 聲明的默認屬性
由於涉及內容衆多,本系列暫不展開細講。
二、自定義配置(屬性)
2.1 定義屬性類
一本書的屬性包含:書名、價格、頁數等,定義一個Book
類,如下:
package com.zyr.demo.domain;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component //將該類作爲Bean注入Spring容器
@ConfigurationProperties(prefix = "book") //配置文件中book前綴的屬性將自動綁定到本類對應的字段
public class Book {
private String name;
private Double price;
private Integer page;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public Integer getPage() {
return page;
}
public void setPage(Integer page) {
this.page = page;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", price=" + price +
", page=" + page +
'}';
}
}
2.2 添加配置參數
類定義完成後,就可在application.yml
以key-value
的形式,增加想自定義的配置,如下:
#Book.java的屬性
book:
name: 一本書
price: 35.5
page: 128
配置完成後,當使用Book
類的時候,其字段將自動賦值配置中的值。
2.3 測試
編寫Book
的測試類,如下:
package com.zyr.demo.domain;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import static org.junit.Assert.assertEquals;
@RunWith(SpringRunner.class)
@SpringBootTest
public class BookTest {
@Autowired
private Book book;
@Test
public void test() {
assertEquals("一本書", book.getName());
assertEquals(35.5, book.getPrice(), .001);
assertEquals(128, book.getPage(), .001);
}
}
運行測試用例,測試通過,說明上面的自定義配置成功。
2.4 另外
Spring Boot
的RandomValuePropertySource
類,提供了很多生成隨機數的工具,如隨機字符串,隨機整數,指定範圍內的隨機數等等。
直接將application.yml
中book
的參數修改如下:
#Book.java的屬性
book:
name: ${random.value} #賦值隨機字符串
price: ${random.int} #賦值隨機整數
page: ${random.int} #賦值隨機整數
將BookTest.test
改爲打印輸出Book
,多次運行,控制檯每次顯示的Book
的值都不一樣:
@Test
public void test() {
System.out.println(book);
}
三、適配多環境
通常在一個實際的項目中,會有開發環境,生產環境等,並且在不同的環境中,對應的配置如:數據庫配置,端口號配置,緩存配置等,一般會不同,所以需要針對不同的環境,編寫不同的配置文件,公用的配置直接寫在application.yml
中。
3.1 新增配置文件
在與application.yml
同級的地方,即resources
文件夾下新增如下兩個配置文件:
application-dev.yml //開發環境配置文件
application-pro.yml //生產環境配置文件
3.2 使用指定環境的配置文件
通過在application.yml
使用spring.profiles.active
配置,即可使用指定環境的配置文件,如:
#文件`application.yml`
spring:
profiles:
active: dev #使用開發環境配置
#文件`application-dev.yml`
#Book.java的屬性
book:
name: ${random.value} #賦值隨機字符串
price: ${random.int} #賦值隨機整數
page: ${random.int} #賦值隨機整數
#文件`application-pro.yml`
#Book.java的屬性
book:
name: 一本書
price: 35.5
page: 128
3.3 測試
現在是開發環境,運行上面的測試用例BookTest.test
,控制檯輸出隨機數的Book
:
Book{name='d326d313d13023c9b32f9f76efe90063', price=1.8404973E9, page=1297575634}
將application.yml
改爲:
spring:
profiles:
active: pro #使用生成環境配置
再次運行測試用例BookTest.test
,控制檯輸出application-pro.yml
中指定的Book
的值:
Book{name='一本書', price=35.5, page=128}
最後
本文介紹了實際開發中Spring Boot
常用的配置情況,關於application.yml
中詳細的配置說明,請參考官方說明。
本文代碼已上傳至我的GitHub倉庫,進入以後將branches切換爲2-Config即可看見。
前篇:
Spring Boot實際應用講解(一):Hello World
後續將推出以下文章,敬請關注!
Spring Boot實際應用講解(三):表單驗證
Spring Boot實際應用講解(四):RESTful API
Spring Boot實際應用講解(五):AOP之請求日誌
Spring Boot實際應用講解(六):MySQL + Spring-data-jpa(Hibernate)
Spring Boot實際應用講解(七):統一異常處理
Spring Boot實際應用講解(八):MySQL + Mybatis
Spring Boot實際應用講解(九):MySQL + Mybatis + Redis
文中若有錯之處,還請各位批評指正,謝謝!
原文作者/ZYRzyr
原文鏈接:http://www.jianshu.com/p/d4c7f33c9b37
請進入這裏獲取授權:https://101709080007647.bqy.mobi