日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

SpringBoot配置文件簡介

作者:一眉程序猿 更新時間: 2022-05-20 編程語言

從傳統的Java web到SSM框架,都是在對開發過程的簡化,后面又出現了SpringBoot,這就使得開發更加的簡化了。我們在使用SSM框架的時候,各種配置文件,使得Spring在某一段時間里被稱作“配置地獄”,后面為了更加簡化,就出現了SpringBoot,SpringBoot幫助我們做了很多的事情,使得開發更加簡化了。

下面就聊聊博主對于SpringBoot配置文件的理解(以下理解全部是基于Java語言的Maven構建的SpringBoot工程)。

1.SpringBoot配置文件說明

SpringBoot項目是一個標準的Maven項目,它的配置文件需要放在src/main/resources/下,其文件名必須為application,其存在兩種文件形式,分別是properties和yaml(或者yml)文件。
在這里插入圖片描述

properties yaml
語法結構 key=value key: value(:和value之間需要空格)
文件后綴 .properties .yaml或者.yml

如果兩種類型的配置文件同時存在,properties文件的優先級大于yaml文件。

舉個例子,同樣是配置端口號,properties文件如下:

# 修改端口號為80
server.port=80

yaml文件如下:

# 修改端口號為80
server:
  port: 80

博主更喜歡使用yaml文件作為配置文件。

2.讀取自定義配置數據

在SpringBoot項目的開發過程中可能會存在自定義的一些數據需要讀取到程序中,我們也能夠直接在SpringBoot的配置文件中自定義。

使用Idea新建一個SpringBoot項目,在pom文件中添加依賴如下:


<dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
dependency>


<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-configuration-processorartifactId>
    <optional>trueoptional>
dependency>

然后在主啟動類的同級目錄下建config包,并在下面創建兩個類,供以使用。
Address類:

package com.ara.config;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Address {

    private String province;
    private String city;
    private String street;

}

Student類:

package com.ara.config;

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

import java.util.Date;
import java.util.Map;

//lombok注解
@Data
@NoArgsConstructor
@AllArgsConstructor

//將當前類對象放在IOC容器中
@Component
//表示與配置文件中前綴為student的數據相對應
@ConfigurationProperties(prefix = "student")
public class Student {

    private int id;
    private String name;
    private boolean sex;
    private String[] subjects;
    /**
     * 時間(默認時間格式:1999/09/23)
     * 可通過@DateTimeFormat注解指定
     * eg: @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     */
    private Date birthday;
    private Map<String,String> teachers;
    private Address address;

}

然后在配置文件(application.yaml)中寫入數據如下:

# student對象的自定義數據
student:
  id: 20200729
  name: Ara
  sex: true
  # 數組 還可以寫成如下:
  # subjects: [C,C++,Java]
  subjects:
    - C
    - C++
    - Java
  # 時間
  birthday: 1999/09/23
  # Map集合
  teachers:
    math: 湯老師
    C: Tom
    Java: jack
  # 對象 對象還可以寫成如下行內形式(注意:和value之間的空格)
  # address: {province: 四川,city: 成都,street: 成華大道}
  address:
    province: 四川
    city: 成都
    street: 成華大道
# 自定義value
custom:
  def:
    value: 這是一個自定義的值

然后在測試類中寫入以下代碼:

//自動注入我們提供的Student類對象
@Autowired
private Student student;

//通過${xxx.xxx}來獲取配置文件中指定key的值
@Value("${custom.def.value}")
private String value;

@Test
void contextLoads() {
    System.out.println(student);
    System.out.println(value);
}

然后運行測試項目,發現控制臺打印出我們在配置文件中編寫的數據:
在這里插入圖片描述

到此,就成功的讀取到了自定義配置的數據。

3.SpringBoot的配置

除了自定義的配置,就是SpringBoot本身就有的配置。
舉個例子:
我們設置項目的端口號,在配置文件中寫入server.port=xxxx,這里就是在ServerProperties類中注入了我們配置的值,打開源碼可見:
在這里插入圖片描述

如果我們沒有進行設置,將會使用SpringBoot提供的默認配置。

當然這配置還有很多,具體的可以在spring-boot-autoconfiguration-x.x.x.jar/META-INF/spring.factories中去查看。

再舉個例子,連接數據庫的配置,我們在spring.factories中可以看到這個類。
在這里插入圖片描述
然后我們繼續跟進,直接查看該類的源碼:
在這里插入圖片描述
我們發現該類對象出現在IOC容器中是有條件的,這里的@ConditionalOnXxx就決定了該類對象是否會自動注入到IOC容器中。

@Configuration(proxyBeanMethods = false)
//該類要在DataSource和EmbeddedDatabaseType類對象存在于IOC中才會自動注入到IOC
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
//該類需要在IOC中沒有類型為"io.r2dbc.spi.ConnectionFactory"的bean才能被注入IOC
@ConditionalOnMissingBean(type = "io.r2dbc.spi.ConnectionFactory")
//自動配置類
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ DataSourcePoolMetadataProvidersConfiguration.class, DataSourceInitializationConfiguration.class })

我們繼續跟進自動配置類DataSourceProperties.class

在這里插入圖片描述
然后我們又發現了這個注解@ConfigurationProperties,現在我們就明白了,SpringBoot的配置我們都可以通過這種方式去查看源碼和進行自定義配置。

簡單示意圖如下:
在這里插入圖片描述

僅僅通過這一點的源碼跟進,我們就發現了SpringBoot設計的巧妙之處,當然這只是很淺的“皮毛”,需要更加深入理解的話,還是要花費很深的功夫。

如有不嚴謹或者錯誤的描述之處,還望大佬們能夠批評指教。

原文鏈接:https://blog.csdn.net/weixin_45935633/article/details/107671665

欄目分類
最近更新