Spring Boot兩種全局配置和兩種註解的操作方法

零、學習目標

1、掌握application.properties配置文件

2、掌握application.yaml配置文件

3、掌握使用@ConfigurationProperties註入屬性

4、掌握使用@Value註入屬性

 一、全局配置文件概述

全局配置文件能夠對一些默認配置值進行修改。Spring Boot使用一個application.properties或者application.yaml的文件作為全局配置文件,該文件存放在src/main/resource目錄或者類路徑的/config,一般會選擇resource目錄。

二、Application.properties配置文件

(一)創建Spring Boot的Web項目PropertiesDemo

利用Spring Initializr方式創建項目

在這裡插入圖片描述

設置項目元數據

在這裡插入圖片描述

添加測試和Web依賴

在這裡插入圖片描述

設置項目名稱及保存位置

在這裡插入圖片描述

單擊【Finish】按鈕,完成項目初始化工作

在這裡插入圖片描述

設置項目編碼為utf8

在這裡插入圖片描述

(二)在application.properties裡添加相關配置 點開resource目錄,查看應用程序屬性配置文件

在這裡插入圖片描述

1、配置tomcat端口號和web虛擬路徑

#修改tomcat默認端口號
server.port=8888
#修改web虛擬路徑
server.servlet.context-path=/lzy

在這裡插入圖片描述

更多配置屬性,詳見官網https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html啟動應用,查看控制臺

在這裡插入圖片描述

2、對象類型的配置與使用

(1)創建Pet類

在net.hw.lesson03裡創建bean子包,在子包裡創建Pet類

在這裡插入圖片描述

package net.hw.lesson03.bean;
 
/**
 * 功能:寵物實體類
 * 作者:華衛
 * 日期:2021年04月28日
 */
public class Pet {
    private String type; // 類型
    private String name; // 名字
 
    public String getType() {
        return type;
    }
 
    public void setType(String type) {
        this.type = type;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    @Override
    public String toString() {
        return "Pet{" +
                "type='" + type + '\'' +
                ", name='" + name + '\'' +
                '}';
    }
}

(2)創建Person類

在net.hw.lesson03.bean包裡創建Person類

在這裡插入圖片描述

package net.hw.lesson03.bean;
 
import java.util.List;
import java.util.Map;
 
/**
 * 功能:人類
 * 作者:華衛
 * 日期:2021年04月28日
 */
public class Person {
    private int id; // 編號
    private String name; // 姓名
    private List<String> hobby; // 愛好;
    private Map<String, String> family; // 傢庭成員
    private Pet pet; // 寵物
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public List<String> getHobby() {
        return hobby;
    }
 
    public void setHobby(List<String> hobby) {
        this.hobby = hobby;
    }
 
    public Map<String, String> getFamily() {
        return family;
    }
 
    public void setFamily(Map<String, String> family) {
        this.family = family;
    }
 
    public Pet getPet() {
        return pet;
    }
 
    public void setPet(Pet pet) {
        this.pet = pet;
    }
 
    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", hobby=" + hobby +
                ", family=" + family +
                ", pet=" + pet +
                '}';
    }
}

(3)在application.properties裡配置對象

#配置對象
person.id=1
person.name=張三豐
person.hobby=旅遊,美食,音樂
person.family.father=張雲光
person.family.mother=吳文燕
person.family.grandpa=張宏宇
person.famliy.grandma=唐雨欣
person.family.son=張君寶
person.family.daughter=張曉敏
person.pet.type=泰迪犬
person.pet.name=瑞瑞

在這裡插入圖片描述

(4)給Person類添加註解

添加註解@Component,交給Spring去管理

在這裡插入圖片描述

添加註解@ConfigurationProperties(prefix = “person”)

在這裡插入圖片描述

註意:采用@ConfigurationProperties註解方式,必須要有set方法,才會自動為Person類所有屬性註入相應的值,包括簡單類型和復雜類型

(5)給Pet類添加註解

  • 添加註解@Component,交給Spring去管理
  • 添加註解@ConfigurationProperties(prefix = “person.pet”) – 可以不用添加

在這裡插入圖片描述

(6)從Spring容器裡獲取Person類的實例並輸出

實現接口ApplicationContextAware,實現其抽象方法setApplicationContext

在這裡插入圖片描述

聲明ApplicationContext對象,並在setApplicationContext裡初始化

在這裡插入圖片描述

創建測試方法testPerson(),從Spring容器中獲取Person類的實例並輸出

在這裡插入圖片描述

運行測試方法testPerson(),查看結果

在這裡插入圖片描述

(7)解決輸出結果的漢字亂碼問題

使用JDK工具native2ascii.exe將漢字處理成uncode編碼

在這裡插入圖片描述

D:\IdeaProjects\PropertiesDemo>cd src/main/resources
 
D:\IdeaProjects\PropertiesDemo\src\main\resources>native2ascii -encoding utf8 application.properties
#\u4fee\u6539tomcat\u9ed8\u8ba4\u7aef\u53e3\u53f7
server.port=8888
#\u4fee\u6539web\u865a\u62df\u8def\u5f84
server.servlet.context-path=/lzy
 
#\u914d\u7f6e\u5bf9\u8c61
person.id=1
person.name=\u5f20\u4e09\u4e30
person.hobby=\u65c5\u6e38,\u7f8e\u98df,\u97f3\u4e50
person.family.father=\u5f20\u4e91\u5149
person.family.mother=\u5434\u6587\u71d5
person.family.grandpa=\u5f20\u5b8f\u5b87
person.famliy.grandma=\u5510\u96e8\u6b23
person.family.son=\u5f20\u541b\u5b9d
person.family.daughter=\u5f20\u6653\u654f
person.pet.type=\u6cf0\u8fea\u72ac
person.pet.name=\u745e\u745e
 
D:\IdeaProjects\PropertiesDemo\src\main\resources>

修改application.properties文件,漢字采用unicode編碼形式

在這裡插入圖片描述

運行測試方法testPerson(),查看結果

在這裡插入圖片描述

(8)從Spring容器裡獲取Pet類的實例並輸出

查看Pet類的註解,有配置屬性的註解@ConfigurationProperties(prefix = "person.pet")

在這裡插入圖片描述

在測試類裡添加測試方法testPet()

在這裡插入圖片描述

運行測試方法testPet(),查看結果

在這裡插入圖片描述

註釋掉Pet類的配置屬性的註解@ConfigurationProperties(prefix = "person.pet")

在這裡插入圖片描述

再次運行測試方法testPet(),查看結果

在這裡插入圖片描述

修改application.properties,配置寵物對象

在這裡插入圖片描述

再次運行測試方法testPet(),查看結果

在這裡插入圖片描述

大傢可以看到,寵物對象的屬性依然沒有被註入,下面我們換一種屬性註解的方式,采用@Value註解方式。

給Pet類的屬性添加值註解@Value

在這裡插入圖片描述

再次運行測試方法testPet(),查看結果

在這裡插入圖片描述

3、兩種屬性註解方式的對比

  •  采用@ConfigurationProperties註解方式,必須要有set方法,才會自動為所註解的類的全部屬性註入相應的值,包括簡單類型和復雜類型(List、Map、Pet……)。
  • 采用@Value註解方式,優點在於可以不要set方法,但是有兩點不足:其一、需要一個一個地註入,顯得麻煩;其二、對於復雜類型不能註入,比如Map、List、Pet等。

三、Application.yaml配置文件

1、備份application.properties文件 文件更名為application.back,即讓此文件不起作用

在這裡插入圖片描述

2、在resoures目錄裡創建application.yaml文件

創建application.yaml文件

在這裡插入圖片描述

配置服務器屬性

在這裡插入圖片描述

配置person對象屬性

在這裡插入圖片描述

配置pet對象屬性

在這裡插入圖片描述

查看application.yaml文件內容

#配置服務器
server:
  port: 8888
  servlet:
    context-path: /lzy
 
#配置person對象
person:
  id: 1
  name: 張三豐
  hobby:
    旅遊
    美食
    音樂
  family: {
       father: 張雲光,
       mother: 吳文燕,
       grandpa: 張宏宇,
       grandma: 唐雨欣,
       son: 張君寶,
       daughter: 張曉敏
    }
  pet:
    type: 泰迪犬
    name: 瑞瑞
 
#配置pet對象
pet:
  type: 泰迪犬
  name: 瑞瑞

3、運行測試方法testPerson(),查看結果

在這裡插入圖片描述

4、運行測試方法testPet(),查看結果

在這裡插入圖片描述

四、兩種配置文件的比較

1、application.properties配置文件

  • 采用XML語法,鍵值對:鍵=值,沒有層次結構
  • 如果值裡有漢字,必須得轉成unicode,否則會出現亂碼問題

2、application.yaml配置文件

  • 采用YAML語法,鍵值對:鍵: 值(冒號與值之間有空格),具有層次結構
  • 允許值裡有漢字,不必轉成unicode,也不會出現亂碼問題

五、課後作業

任務:修改StudentInfo項目輸出學生信息

在這裡插入圖片描述

創建學生實體類Student

在這裡插入圖片描述

添加屬性

private String id;
private String name;
private String gender;
private int age;
private String major;
private String telephone;
private String email;
private String hobby;
  • 添加getter和setter
  • 添加toString()方法
  • 添加註解@Component
  • 添加註解@ConfigureProperties
  • 將application.properties更名為application.yaml

在這裡插入圖片描述

配置student對象屬性

在這裡插入圖片描述

  • 修改控制器StudentInfoController,student()方法裡返回student的值
  • 運行啟動類

在這裡插入圖片描述

在瀏覽器裡訪問http://localhost:8080/student

在這裡插入圖片描述

到此這篇關於Spring Boot兩種全局配置和兩種註解的文章就介紹到這瞭,更多相關Spring Boot配置註解內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: