天天看點

SpringBoot 全局的配置檔案

Spring Boot 提供了大量的自動配置,極大地簡化了spring 應用的開發過程,當使用者建立了一個 Spring Boot 項目後,即使不進行任何配置,該項目也能順利的運作起來。也可以根據自身的需要使用配置檔案修改 Spring Boot 的預設設定。

SpringBoot 預設使用以下 2 種全局的配置檔案,其檔案名是固定的。

  • application.properties
  • application.yml

application.properties與 application.yaml都可以作為Spring Boot的配置檔案,隻是書寫格式不同而已,在 Spring Boot 啟動時被自動讀取。當然也可以同時使用,但同級目錄下讀取的順序是先讀取application.properties在讀取application.yaml。該配置檔案的存放路徑如下圖所示。

一、application.properties的文法及使用

1.1.Properties 文法

  • 使用properties的key=value形式
  • 使用層級遞進關系。
  • 從最高層到最低層逐個低級,中間使用點"."間隔
server.port=8090 #設定Tomcat端口
spring.datasource.driver-class-name=com.mysql.jdbc.Driver #資料驅動
spring.datasource.url=jdbc:mysql://localhost:3306/cqyddx?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=test
spring.datasource.password=123456      
SpringBoot 全局的配置檔案

1.2.Properties常用寫法

properties支援以下三種資料結構:

  • 對象:鍵值對的集合
  • 數組:一組按次序排列的值
  • 字面量:單個的、不可拆分的值

1.3.properties字面量寫法

字面量是指單個的,不可拆分的值,例如:數字、字元串、布爾值、以及日期:date、boolean、string、number、null等。

user.username=hello vipe
user.age=28
user.birth=2022/11/02 13:14:15      

1.4.properties對象寫法

在 properties中,對象可能包含多個屬性,每一個屬性都是一對鍵值對。properties 為對象提供了 以下寫法:

user.username="vipe"
user.age=28      

1.5.properties 數組、List、Map、Set 行内寫法

#數組行内寫法
user.hobby=basketball,football,volleyball

#list集合行内寫法
user.booksname.chinese=java,python,go
        
#map的行内寫法
user.books={key1=spring, key2=springmvc, key3=springboot, key4=springcloud}

#set的行内寫法
user.salary=33,27,43      

1.6.properties  數組、List、Map、Set 非行内寫法 及 複合結構寫法

#數組寫法    使用[x]表示數組中的元素,寫法如下:
user.hobby[0]=basketball
user.hobby[1]=football
user.hobby[2]=volleyball


#list集合寫法  使用[x]表示集合中的元素,寫法如下:
user.booksname[0]=java
user.booksname[1]=python
user.booksname[2]=go


##map集合的key value  使用key表示map中的key,寫法如下:
user.books.key1=spring
user.books.key2=springmvc
user.books.key3=springboot
user.books.key4=springcloud


#map集合的value是map形式 表示在books集合中使用chinese做為鍵,值是一個map集合,值為map集合以chinese[0]作為鍵
user.books.chinese[0]=Darkness
user.books.chinese[1]=Gorgeous
user.books.chinese[2]=Night


#map集合的value是map形式 使用chinese.xxx表示map中的key為sm值為Smile,寫法如下:
user.books.chinese.sm=Smile
user.books.chinese.fuf=Fury
user.books.chinese.tn=Tender


#set集合以下标方式指派  使用[x]表示集合中的元素,寫法如下:
user.salary[0]=64
user.salary[1]=37
user.salary[2]=58


#複合結構寫法   使用遞進表示對象與屬性的層級關系
user.book.bookName=C++
user.book.bookPrice=52      

1.7.測試

1.7.1.需要添加lombok依賴

<dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
</dependency>      

1.7.2.準備user和book類

package com.augus.dao;

import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Data
@AllArgsConstructor
@Component
@ConfigurationProperties(prefix = "user")
public class User {
    private String username;
    private Integer age;
    private Book book;
    private Date birth;
    private String[] hobby;
    private List<String> booksName;
    private Map<String, Object> books;
    private Set<Double> salary;

    public User() {
        System.out.println("建立user bean");
    }

}      
package com.augus.dao;

import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.stereotype.Component;

@Data
@AllArgsConstructor
@Component
public class Book {
    private String bookName;
    private Double bookPrice;
    public Book(){
        System.out.println("建立book bean");
    }
}      

1.7.3.在啟動類中編寫如下代碼

package com.augus;

import com.augus.dao.User;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Springboot03Application {

    public static void main(String[] args) {
        //傳回IOC容器
        ConfigurableApplicationContext run = SpringApplication.run(Springboot03Application.class, args);

        User user = run.getBean("user", User.class);
        System.out.println(user.getUsername());
        System.out.println(user);
    }

}      

啟動執行之後結果如下:

SpringBoot 全局的配置檔案

二、application.yml的文法及使用

 application.yml 是一種使用 YAML 語言編寫的檔案,它與 application.properties 一樣,可以在 Spring Boot 啟動時被自動讀取,修改 Spring Boot 自動配置的預設值。

2.1.YAML 簡介

YAML 全稱 YAML Ain't Markup Language,它是一種以資料為中心的标記語言,比 XML 和 JSON 更适合作為配置檔案。

想要使用 YAML 作為屬性配置檔案(以 .yml 或 .yaml 結尾),需要将 SnakeYAML 庫添加到 classpath 下,Spring Boot 中的 spring-boot-starter-web 或 spring-boot-starter 都對 SnakeYAML 庫做了內建, 隻要項目中引用了這兩個 Starter 中的任何一個,Spring Boot 會自動添加 SnakeYAML 庫到 classpath 下。

下面是一個簡單的 application.yml 屬性配置檔案。

SpringBoot 全局的配置檔案

2.2.YAML 文法

YAML 的文法如下:

  • 使用縮進表示層級關系。
  • 縮進時不允許使用 Tab 鍵,隻允許使用空格。
  • 縮進的空格數不重要,但同級元素必須左側對齊。
  • 大小寫敏感。

例如:

server:
  port: 8090

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    username: test
    password: 123456
    url: jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai      

2.3.YAML 字面量寫法

字面量是指單個的,不可拆分的值,例如:數字、字元串、布爾值、以及日期等。

在 YAML 中,使用“key:[空格]value”的形式表示一對鍵值對(空格不能省略),如 url: www.baidu.com。

字面量直接寫在鍵值對的“value”中即可,且預設情況下字元串是不需要使用單引号或雙引号的。

name: zhangsan      

若字元串使用單引号,則會轉義特殊字元。

name: zhangsan \n lisi      

輸出結果為:

zhangsan \n lisi      

若字元串使用雙引号,則不會轉義特殊字元,特殊字元會輸出為其本身想表達的含義

name: zhangsan \n lisi      

輸出結果為:

  • zhangsan
  • lisi

2.4.YAML 對象、數組、List、Map、Set的行内寫法與縮進寫法 

在 YAML 中,對象可能包含多個屬性,每一個屬性都是一對鍵值對。

YAML 為對象提供了 2 種寫法:縮進式寫法、行内式寫法,但注意,無論是縮進寫法還是行内寫法,冒号後都必須有一個空格。

2.4.1.行内寫法

# user對象 行内寫法:注意冒号後空格

user: {
  username: vipe is good,
  age: 27,
  birth: 2022/11/02 12:13:14,

  # book對象 行内寫法:注意冒号後空格

  book: {bookName: springboot , bookPrice:102},

  # 數組 行内寫法:注意冒号後空格

  hobby: [basketball,football,volleyball],

  # List 行内寫法:注意冒号後空格
  booksname: [java,python,go],

  # Map 行内寫法:注意冒号後空格
  books: {key1: spring, key2: springmvc, key3: springboot, key4: springcloud,
           chinese: {0: Darkness, 1: Gorgeous, 2: Night, sm: Smile, fuf: Fury, tn: Tender}},

  # Set 行内寫法:注意冒号後空格
  salary: [64, 37, 58]
}      

2.4.2.縮進寫法

# user對象 縮進寫法:注意冒号後空格

user:
  username: 'vipe is good'
  age: 27
  birth: 2022/11/02 12:13:14

  # book對象 縮進寫法

  book:
    bookName: springboot
    bookPrice: 102

  # 數組 行内寫法:注意冒号後空格

  hobby:
    - basketball
    - football
    - volleyball

  # List 行内寫法:注意冒号後空格
  booksname:
    - java
    - python
    - go

  # Map 行内寫法:注意冒号後空格
  books:
    key1: spring
    key2: springmvc
    key3: springboot
    key4: springcloud
    chinese:
      0: Darkness
      1: Gorgeous
      2: Night
      sm: Smile
      fuf: Fury
      tn: Tender


  # Set 行内寫法:注意冒号後空格
  salary:
    - 64
    - 37
    - 58      

2.5.測試結果