網站首頁 編程語言 正文
從傳統的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
相關推薦
- 2022-07-16 Spring MVC @Autowired和@Service注解
- 2022-10-24 centos編譯安裝mariadb的詳細過程_mariadb
- 2024-03-08 jdk版本不兼容 Error creating bean with name ‘springSecu
- 2022-02-09 Qt5連接并操作PostgreSQL數據庫的實現示例_C 語言
- 2022-07-17 Android?studio實現簡單計算器的編寫_Android
- 2022-11-07 SwiftUI?引導頁界面實現示例_Swift
- 2022-03-21 oracle中commit之后進行數據回滾的方法_oracle
- 2023-03-21 Python閉包與閉包陷阱舉例詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支