Spring Boot實際應用講解(二):配置詳解 一、默認配置 二、自定義配置(屬性) 三、適配多環境 最後

文/ZYRzyr
原文鏈接:http://www.jianshu.com/p/d4c7f33c9b37

本文提綱
一、默認配置
二、自定義配置(屬性)
三、適配多環境
四、最後

本文運行環境

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.ymlapplication.properties,裏面可以聲明如數據庫連接、tomcat、緩存等等非常多的配置,可根據項目實際需要進行配置。.yml.properties區別僅在於.yml使用YAML語法進行書寫,更方便人閱讀,所以本系列文章,均使用.yml作爲後綴的配置文件。
某些情況下,需要改變配置參數,比如項目運行時進行配置參數修改,需要遵循以下配置優先級:

  1. 命令行參數
  2. 來自java:comp/env的JNDI屬性
  3. Java系統屬性(System.getProperties())
  4. 操作系統環境變量
  5. RandomValuePropertySource 屬性類生成的 random.* 屬性
  6. 應用以外(jar包外部)的 application.yml(或 properties)(帶spring.profile)文件
  7. 打包在應用內(jar包內部)的 application.yml(或 properties)(帶spring.profile)文件
  8. 應用以外(jar包外部)的 application.yml(或 properties)(不帶spring.profile)文件
  9. 打包在應用內(jar包內部)的 application.yml(或 properties)(不帶spring.profile)文件
  10. @Configuration註解類上的@PropertySource
  11. 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.ymlkey-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 BootRandomValuePropertySource類,提供了很多生成隨機數的工具,如隨機字符串,隨機整數,指定範圍內的隨機數等等。
直接將application.ymlbook的參數修改如下:

#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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章