欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?boot配置綁定和配置屬性校驗的方式詳解

 更新時間:2022年05月07日 10:14:07   作者:桃花鍵神  
這篇文章主要介紹了Spring?boot配置綁定和配置屬性校驗,SpringBoot 提供了2 種方式進行配置綁定,即使用 @ConfigurationProperties 注解和使用 @Value 注解,需要的朋友可以參考下

配置綁定

所謂配置綁定”就是把配置文件中的值與 JavaBean 中對應的屬性進行綁定。通常,我們會把一些配置信息(例如,數(shù)據(jù)庫配置)放在配置文件中,然后通過 Java 代碼去讀取該配置文件,并且把配置文件中指定的配置封裝到 JavaBean(實體類) 中。
SpringBoot 提供了以下 2 種方式進行配置綁定:

  • 使用 @ConfigurationProperties 注解
  • 使用 @Value 注解

先建立數(shù)據(jù)配置文件

application.yml

sb:
  port: 8086
  username: 'abc \n hello' #字符串 
  password: 6564321 #字符串 
  birthday: 2011/12/23 #日期 
  books: #map 
    jsp: 36 
    html: 78 
    spring: 78 
  books2: {jsp: 56,spring: 65,mybatis: 98} #map 行內 
  person: #javabean 
    name: abc 
    age: 23 
  person2: {name: lily, age: 36 } #javabean行內 
  hobby: #數(shù)組 
    - jsp 
    - hibernate 
    - spring 
    - mybatis 
  list: # list集合 
    - 32 
    - 65
    - 98 
  set: #set 集合 
    - hello 
    - world 
  hobby2: [23,45,56] #數(shù)組 list set 行內 
  mapList: # 數(shù)組 list set 里存map 
    - jsp: 36 
      hibernate: 58 
    - html: 65 
      css: 98 
      js: 65
    - {vue: 36,react: 98}

@ConfigurationProperties

通過 Spring Boot 提供的 @ConfigurationProperties 注解,可以將全局配置文件中的配置數(shù)據(jù)綁定到 JavaBean 中。
DbConfig.java

@Configuration 
@ConfigurationProperties(prefix = "sb") 
public class DbConfig { 
String username; 
String password; 
Date birthday;
Map books;
Person person;
Map books2;
Person person2;
String [] hobby;
List list;
Set set ;
int [] hobby2;
List<Map> mapList;
       /************省略geter/seter方法*************/ 
       }

只有在容器中的組件,才會擁有 SpringBoot 提供的強大功能。如
果我們想要使用 @ConfigurationProperties 注解進行配置綁定,
那么首先就要保證該對 JavaBean 對象在 IoC 容器中,所以需要用
到 @Configuration 注解來添加組件到容器中。
JavaBean 上使用了注解 @ConfigurationProperties(prefix = “sb”)
,它表示將這個 JavaBean 中的所有屬性與配置文件中以“sb”為前
綴的配置進行綁定。

@Value

@Value的作用是通過注解將常量、配置文件中的值、其他bean的屬性值注入到變量中,作為變量的初始值。 @Value的值有兩類:
① ${property : default_value }
② #{ obj.property? :default_value }
第一個注入的是外部配置文件對應的property,第二個則是SpEL表達式對應的內容。
default_value,就是前面的值為空時的默認值。注意二者的不同,#{}里面那個obj代表對象。

也就是說@Value注解有兩種用法,一種是@Value(“${}”)和@Value(“#{}”),搞清楚分類后我們一一來分析。

第一種 @Value(“${}”)

controller層代碼:

@RestController
@RequestMapping("/test")
public class ValueController {
    @Autowired
    private CarpollingService carpollingService;
    @GetMapping("/getValue")
    public String getValue(){
        return carpollingService.getValue();
    }
}

配置類代碼:

@Configuration 
public class CarpollingServiceImpl {
    @Value("${db.port}")
    private String port;
    @Override
    public String getValue() {
        return port;
    }
}

第二種@Value(“#{}”)

注意: #{}是不能以第一種方式來進行取值,否則會報錯

前面已經(jīng)說了,#{}里面包含的是obj,所以需要配合bean來使用,現(xiàn)在創(chuàng)建一個UserBean,并且給某個字段加上@Value(“#{}”)注解(按自己的需求任意添加注解)

UserBean類代碼:

@Data
@Component//添加component注解,使其注冊進容器,交由容器進行管理
public class UserBean {
    private String name="張三";}

controller層代碼:

@RestController
@RequestMapping("/test")
public class ValueController {
       @Autowired
    CarpollingServiceImpl carpollingService;
    @GetMapping("/getValue")
    public String getValue(){
        return carpollingService.getValue();
    }
}

配置類代碼:

@Configuration
public class CarpollingServiceImpl {
    @Value("#{userBean.name}")
    private String port;
    public String getValue() {
        return port;
    }
}

@PropertySource

如果將所有的配置都集中到 application.properties 或 application.yml
中,那么這個配置文件會十分的臃腫且難以維護,因此我們通常會將與Spring Boot 無關的配置(例如自定義配置)提取出來,寫在一個單獨的配置文件中,并在對應的 JavaBean 上使用 @PropertySource 注解指向該配置文件。

我們也可以自定義配置文件,例如新建 db.properties ,配置內容如下:

pro.username=admin 
pro.password=123456 
pro.birthday=2000/12/01 
pro.age=23 
pro.books={jsp:36,html:360,spring:65} 
pro.hobby=23,34 
pro.list=sprig,myatis 

配置類:

@Component 
@PropertySource("classpath:db.properties") 
@Data 
public class User {
 @Value("${pro.username}") 
 String username; 
 @Value("${pro.password}") 
 String password; 
 @Value("${pro.birthday}") 
 Date birthday;
 }

注: 該注解只能引用properties文件

配置屬性校驗

自定義配置文件時,可以使用@Validated注解對注入的值進行一些簡單的校驗,示例代碼:
Testconfig.java

@Validated
@Configuration
@ConfigurationProperties(prefix = "sb")
public class Testconfig {
    @Max(value = 123)
    private String password;
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

測試

 @Autowired
    Testconfig testconfig;
    @Test
    void a() {
        System.out.println(testconfig.getPassword());
    }

拋出錯誤,最大值不能超過123

@Max(value = 123)注解會對注入的值進行校驗,如果不是小于123的將會報錯拋出
其它常見注解:
@AssertFalse 校驗false
@AssertTrue 校驗true
@DecimalMax(value=,inclusive=) 小于等于value,inclusive=true,
是小于等于
@DecimalMin(value=,inclusive=) 與上類似
@Max(value=) 小于等于value
@Min(value=) 大于等于value
@NotNull 檢查Null
@Past 檢查日期
@Pattern(regex=,flag=) 正則
@Size(min=, max=) 字符串,集合,map限制大小
@Validate 對po實體類進行校驗

上述的這些注解位于javax.validation.constraints包下, SpringBoot 2.3.0以后maven引用:

<dependency> 
<groupId>org.springframework.boot</groupId> 
<artifactId>spring-boot-starter-validation</artifactId> 
</dependency>

@Value 與 @ConfigurationProperties對比

@Value 和 @ConfigurationProperties 注解都能讀取配置文件中的屬性值并綁定到 JavaBean 中,但兩者存在以下不同。

1. 使用位置不同

  • @ConfigurationProperties:標注在 JavaBean 的類名上;
  • @Value:標注在 JavaBean 的屬性上。

2. 功能不同

  • @ConfigurationProperties:用于批量綁定配置文件中的配置;
  • @Value:只能一個一個的指定需要綁定的配置。

3. 松散綁定支持不同

@ConfigurationProperties:支持松散綁定(松散語法),例如實體類Person 中有一個屬性為 firstName,那么配置文件中的屬性名支持以下寫法:

  • person.firstName
  • person.first-name
  • person.first_name
  • PERSON_FIRST_NAME

@Vaule:不支持松散綁定。

4. SpEL 支持不同

  • @ConfigurationProperties:不支持 SpEL 表達式;
  • @Value:支持 SpEL 表達式。

5. 復雜類型封裝

  • @ConfigurationProperties:支持所有類型數(shù)據(jù)的封裝,例如 Map、 List、Set、以及對象等;
  • @Value:支持基本數(shù)據(jù)類型的封裝,例如字符串、布爾值、整數(shù)等類型, 對集合Map list set配置有要求

6.屬性校驗

  • @Value不支持屬性校驗
  • @ConfigurationProperties 支持屬性校驗

7. 應用場景不同

@Value 和 @ConfigurationProperties 兩個注解之間,并沒有明顯的優(yōu)劣之分,它們只是適合的應用場景不同而已。

  • 若只是獲取配置文件中的某項值,則推薦使用 @Value 注解;
  • 若專門編寫了一個 JavaBean 來和配置文件進行映射,則建議使用 @ConfigurationProperties 注解。

我們在選用時,根據(jù)實際應用場景選擇合適的注解能達到事半功倍的效果

到此這篇關于Spring boot配置綁定和配置屬性校驗的文章就介紹到這了,更多相關Spring boot配置屬性校驗內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 微服務框架FEIGN使用常見問題分析

    微服務框架FEIGN使用常見問題分析

    這篇文章主要為大家介紹了微服務框架FEIGN常見問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • SpringBoot啟動時自動執(zhí)行sql腳本的方法步驟

    SpringBoot啟動時自動執(zhí)行sql腳本的方法步驟

    本文主要介紹了SpringBoot啟動時自動執(zhí)行sql腳本的方法步驟,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java 前臺加后臺精品圖書管理系統(tǒng)的實現(xiàn)

    Java 前臺加后臺精品圖書管理系統(tǒng)的實現(xiàn)

    相信每一個學生學編程的時候,應該都會寫一個小項目——圖書管理系統(tǒng)。為什么這么說呢?我認為一個學校的氛圍很大一部分可以從圖書館的氛圍看出來,而圖書管理系統(tǒng)這個不大不小的項目,接觸的多,也比較熟悉,不會有陌生感,能夠練手,又有些難度,所以我的小項目也來了
    2021-11-11
  • Spring中的@ConfigurationProperties在方法上的使用詳解

    Spring中的@ConfigurationProperties在方法上的使用詳解

    這篇文章主要介紹了Spring中的@ConfigurationProperties在方法上的使用詳解,@ConfigurationProperties應該經(jīng)常被使用到,作用在類上的時候,將該類的屬性取值?與配置文件綁定,并生成配置bean對象,放入spring容器中,提供給其他地方使用,需要的朋友可以參考下
    2024-01-01
  • Java中的參數(shù)傳遞詳細介紹

    Java中的參數(shù)傳遞詳細介紹

    大家好,本篇文章主要講的是Java中的參數(shù)傳遞詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • springboot整合ehcache和redis實現(xiàn)多級緩存實戰(zhàn)案例

    springboot整合ehcache和redis實現(xiàn)多級緩存實戰(zhàn)案例

    這篇文章主要介紹了springboot整合ehcache和redis實現(xiàn)多級緩存實戰(zhàn)案例,從源碼角度分析下多級緩存實現(xiàn)原理,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • SpringBoot項目多層級多環(huán)境yml設計詳解

    SpringBoot項目多層級多環(huán)境yml設計詳解

    這篇文章主要為大家介紹了SpringBoot項目多層級多環(huán)境yml設計詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Java中synchronized鎖升級的過程

    Java中synchronized鎖升級的過程

    本文主要介紹了Java中synchronized鎖升級的過程,synchronized相對于早期的synchronized做出了優(yōu)化,從以前的加鎖就是重量級鎖優(yōu)化成了有一個鎖升級的過,下文詳細內容需要的小伙伴可以參考一下
    2022-05-05
  • java集合PriorityQueue優(yōu)先級隊列方法實例

    java集合PriorityQueue優(yōu)先級隊列方法實例

    這篇文章主要為大家介紹了java集合PriorityQueue優(yōu)先級隊列方法實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 如何使用Jackson和JSON Pointer查詢解析任何JSON節(jié)點

    如何使用Jackson和JSON Pointer查詢解析任何JSON節(jié)點

    本文介紹了JSON Pointer是字符串表達式,可以非常方便解析復雜JSON節(jié)點值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論