Spring Boot [配置-上篇]

導讀:


在上篇文章學習到了如何搭建一個簡單的Spring Boot的項目,這篇文章咱們主要圍繞Spring Boot的外部化文件展開,php

快速開始:外部化配置


首先是一個典型的Spring Boot的項目結構以下css

com
 +- example
     +- myproject
         +- Application.java
         |
         +- domain
         |   +- Customer.java
         |   +- CustomerRepository.java
         |
         +- service
         |   +- CustomerService.java
         |
         +- web
             +- CustomerController.java

而後咱們全部的資源文件都統一放在resources目錄下,結構以下:html

static
 +- css
 |   +- style.css
 |   +- common.css
 +- js
 |   +- index.js
 +- img
     +- img.png
     
templates
 +- index.html
 |   
 +- pages
 |   +- page.html

咱們全部的配置文件都默認放在在resources目錄下java

1.自定義banner:

咱們只須要在Spring Boot工程的/src/main/resources目錄下建立一個banner.txt文件,而後將ASCII字符畫複製進去,就能替換默認的banner了。這是一個自定義的banner.txt文件mysql

${AnsiColor.BRIGHT_GREEN}
  ______                _                  ______
 / _____)              (_)                (____  \                  _
( (____   ____    ____  _  ____    ____    ____)  )  ___    ___   _| |_
 \____ \ |  _ \  / ___)| ||  _ \  / _  |  |  __  (  / _ \  / _ \ (_   _)
 _____) )| |_| || |    | || | | |( (_| |  | |__)  )| |_| || |_| |  | |_
(______/ |  __/ |_|    |_||_| |_| \___ |  |______/  \___/  \___/    \__)
         |_|                     (_____|

${AnsiColor.BRIGHT_RED}
Application Version: ${application.version}${application.formatted-version}
Spring Boot Version: ${spring-boot.version}${spring-boot.formatted-version}

在banner.txt中可使用以下的變量:web

  • ${AnsiColor.BRIGHT_RED}:設置控制檯中輸出內容的顏色spring

  • ${application.version}:用來獲取MANIFEST.MF文件中的版本號sql

  • ${application.formatted-version}:格式化後的${application.version}版本信息數據庫

  • ${spring-boot.version}:Spring Boot的版本號apache

  • ${spring-boot.formatted-version}:格式化後的${spring-boot.version}版本信息

打印效果圖:
圖片描述

備註:
banner的字符畫的生成工具:

2.YAML文件

什麼是YAML:
YAML是一個可讀性高,用來表達數據序列的格式。YAML參考了其餘多種語言,包括:C語言、Python、Perl,並從XML、電子郵件的數據格式(RFC 2822)中得到靈感。Clark Evans在2001年首次發表了這種語言[1],另外Ingy döt Net與Oren Ben-Kiki也是這語言的共同設計者[2]。目前已經有數種編程語言或腳本語言支持(或者說解析)這種語言。引自維基百科
爲何使用YML:
在以往的項目中一寫關於數據庫之類的配置一般都會寫在Properties中,YAML的做用與Properties相似都是用來配置一些屬性值的,可是YAML相比於Properties要更加簡潔,在項目中推薦使用YAML代替Properties,默認名稱爲application.yml
Spring Boot 中的yml:
Spring框架提供兩個便利的類用於加載YAML文檔,YamlPropertiesFactoryBean會將YAML做爲Properties來加載,YamlMapFactoryBean會將YAML做爲Map來加載。
示例:

environments:
    dev:
        url: http://dev.bar.com
        name: Developer Setup
    prod:
        url: http://foo.bar.com
        name: My Cool App

上面的YAML文檔會被轉化到下面的屬性中:

environments.dev.url=http://dev.bar.com
environments.dev.name=Developer Setup
environments.prod.url=http://foo.bar.com
environments.prod.name=My Cool App

使用:
YAML列表被表示成使用[index]間接引用做爲屬性keys的形式,例以下面的YAML:

my:
   servers:
       - dev.bar.com
       - foo.bar.com

將會轉化到下面的屬性中:

my.servers[0]=dev.bar.com
my.servers[1]=foo.bar.com

使用Spring DataBinder工具綁定那樣的屬性(這是@ConfigurationProperties作的事),你須要肯定目標bean中有個java.util.List或Set類型的屬性,而且須要提供一個setter或使用可變的值初始化它,好比,下面的代碼將綁定上面的屬性:

@Component
@ConfigurationProperties(prefix="my")
public class Config {
    private List<String> servers = new ArrayList<String>();
    public List<String> getServers() {
        return this.servers;
    }
}

一個配置數據庫鏈接的示例:

spring:
  datasource:
    platform: mysql
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&useSSL=false
    username: root
    password: root

數據的鬆散綁定:

@Component
@ConfigurationProperties(prefix="person")
public class ConnectionSettings {
    private String firstName;
}

下面的屬性名都能用於上面的@ConfigurationProperties類:

  • person.firstName 標準駝峯規則

  • person.first-name 虛線表示,推薦用於.properties和.yml文件中

  • PERSON_FIRST_NAME 大寫形式,使用系統環境變量時推薦

瞭解更多的 常見應用屬性
瞭解更多 Spring Boot 中的yml使用

3.日誌格式化

Spring Boot在全部內部日誌中使用Commons Logging,可是默認配置也提供了對經常使用日誌的支持,如:Java Util Logging,Log4J, Log4J2和Logback。每種Logger均可以經過配置使用控制檯或者文件輸出日誌內容。
Spring Boot默認的日誌輸出格式以下:

2014-03-05 10:57:51.112  INFO 45469 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2014-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2014-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1358 ms
2014-03-05 10:57:51.698  INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2014-03-05 10:57:51.702  INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'h

默認狀況下,Spring Boot只會將日誌記錄到控制檯而不會寫進日誌文件。能夠經過'logging.level.*=LEVEL'('LEVEL'是TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF中的一個)設置的日誌級別。若是除了輸出到控制檯你還想寫入到日誌文件,那你須要設置logging.file或logging.path屬性。

下面是一個使用YML配置打印路徑及級別的例子:

logging:
  level:
    org.hibernate: ERROR
    org.springframework : DEBUG
      
  path: /logs
  file: myapp.log

日誌管理
Spring Boot 日誌記錄 SLF4J
Spring Boot日誌管理

結語:


在這篇文章中對Spring Boot 中經常使用的外置化配置作了一個簡要的介紹,在下一篇文章將會介紹關於 使用配置類。

參考文檔:


新年彩蛋:Spring Boot自定義Banner
《Spring Boot參考指南》-配置類
Spring boot(2)-配置詳解

相關文章
相關標籤/搜索