Spring Boot 2.x快速上手(五)Spring Boot框架環境切換與自定義配置

目錄

一、簡單認識YAML

二、YAML語法格式

三、環境配置文件

四、自定義配置


一、簡單認識YAML

SpringBoot是基於約定的,所以很多配置都有默認值,但如果想使用自己的配置替換默認配置的話,就可以使用
application.properties或者application.yml(application.yaml)進行配置。SpringBoot默認會從Resources目錄下加載application.properties或application.yml(application.yaml)文件。其中,application.properties文件是鍵值對類型的文件,之前一直在使用,所以此處不在對properties文件的格式進行描述。除了properties文件外,SpringBoot還可以使用yml文件進行配置,下面對yml文件進行講解。

YML文件格式是YAML (YAML Aint Markup Language)編寫的文件格式,YAML是一種直觀的能夠被電腦識別的的數據數據序列化格式,並且容易被人類閱讀,容易和腳本語言交互的,可以被支持YAML庫的不同的編程語言程序導入,比如: C/C++, Ruby, Python, Java, Perl, C#, PHP等。YML文件是以數據爲核心的,比傳統的xml方式更加簡潔。

二、YAML語法格式

  • 標準格式:key:(空格)value
  • 使用空格代表層級關係,以“:”結束

我們以之前學習過的application.properties文件爲例進行修改該文件:

#設置運行時爲debug模式
#debug=false
debug: false

#修改tomcat的默認端口爲8080
#server.port=8080
#server.servlet.cotext-path=/myspringboot
server:
  port: 8080
  servlet:
    context-path: /
#idea對yml有良好支持,可自動生成
#spring.http.encoding.charset=UTF-8
#spring.mvc.date-format=yyyy-MM-dd
spring:
  http:
    encoding:
      charset: UTF-8
  mvc:
    date-format: yyyy-MM-dd

三、環境配置文件

  • 在實際的項目的過程中,有些配置文件在開發、測試或者生產等不同的環境中可能是不同的,比如說數據庫連接等。
  • Spring給我們提供了profiles機制,Spring Boot針對不同的環境提供了不同的Profiles文件。
  • Profiles文件的默認命名格式爲application-{env}.yml
  • 使用spring.profiles.actives選項來指定不同的profiles

例如:

application-dev.properties — 這是開發環境

application-prod.properties — 這是生產環境

當我們同時創建了application.properties、application-dev.properties、application-prod.properties三個文件,

例如:修改三個文件中server.port的配置,即端口號的配置,經過測試,application-dev.properties中的配置覆蓋了application.propertie中的配置。所以呢,我們在配置文件中可以將於環境無關的配置屬性放到application.properties文件中,然後根據環境的變化,將不同的屬性配置放到相應配置文件中去。

四、自定義配置

Spring Boot內置的配置項遠遠不能支持我們的程序運行,在項目設計的時候,往往因爲擴展性的需要,項目需要預留很多的自定義配置,Spring Boot允許我們配置自定義選項。

在SpringBoot中,有兩仲方式使用自定義選項:

  • @Value單個屬性注入
  • @ConfigurationProperties類型安全加載

新建一個自定義的properties文件config.properties文件,進行編寫自定義的屬性。在編寫自定義屬性之前,我們先需要修改一下idea的設置,因爲properties文件對中文的可讀性性是非常不好的,打開設置進行如下的勾選;

舉例:

1、@Value單個屬性的注入:

在MyController類中進行如下編寫:

@Value("${app.name}")
private  String name;
@Value("${app.page-size}")
private  Integer pageSize;

2、@ConfigurationProperties類型安全加載

編寫一個AppConfig類:

@Component//這是一個組件類,寫上這個註解,啓動時會自動加載
//將所有app前綴的屬性自動賦值給對應的bean屬性
@ConfigurationProperties(prefix="app")
public class AppConfig {
    private String  name ;
    private String description;
    private String version;
    private Integer pageSize;
    private Boolean showAdvert;
    private String website;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public Boolean getShowAdvert() {
        return showAdvert;
    }

    public void setShowAdvert(Boolean showAdvert) {
        this.showAdvert = showAdvert;
    }

    public String getWebsite() {
        return website;
    }

    public void setWebsite(String website) {
        this.website = website;
    }

在MyController類中進行如下編寫:

//動態注入IOC容器中匹配的bean
@Autowired
private AppConfig appConfig;

啓動入口類即可獲取到config.properties文件中所寫到的所有屬性。

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