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

SpringBoot開發(fā)技巧啟動(dòng)時(shí)配置校驗(yàn)實(shí)現(xiàn)示例

 更新時(shí)間:2021年10月28日 09:36:56   作者:飄渺Jam  
這篇文章主要為大家介紹了SpringBoot開發(fā)在啟動(dòng)時(shí)自動(dòng)配置校驗(yàn)的實(shí)現(xiàn)示例及原理解析,有需要的朋友可以借鑒參考下希望能夠有所幫助

概述

在項(xiàng)目開發(fā)過程中,某個(gè)功能需要依賴在配置文件中配置的參數(shù)。這時(shí)候就可能出現(xiàn)下面這種現(xiàn)象問題:

有時(shí)候經(jīng)常出現(xiàn)項(xiàng)目啟動(dòng)了,等到使用某個(gè)功能組件的時(shí)候出現(xiàn)異常,提示參數(shù)未配置或者bean注入失敗。

有沒有一種方法在項(xiàng)目啟動(dòng)時(shí)就對(duì)參數(shù)進(jìn)行校驗(yàn)而不是在實(shí)際使用的時(shí)候再拋出提示呢?

答案就是使用Spring提供的Java Validation功能,簡單實(shí)用。

增加啟動(dòng)校驗(yàn)

只需要在我們創(chuàng)建的配置Properties類增加Validation相關(guān)配置即可

@Validated
@Data
@ConfigurationProperties(prefix = "app")
@Component
public class AppConfigProperties {
    @NotEmpty(message = "配置文件配置必須要配置[app.id]屬性")
    private String id;
}

上面的配置就會(huì)校驗(yàn)我們?cè)?application.yml中有沒有配置 app.id參數(shù)。如果在配置文件中沒有該配置,項(xiàng)目啟動(dòng)就會(huì)失敗,并拋出校驗(yàn)異常。

在使用配置文件校驗(yàn)時(shí),必須使用@configurationproperties注解,@value不支持該注解。

在需要使用app.id的時(shí)候注入配置類即可:

@Autowired
private AppConfigProperties appConfigProperties;

這樣就可以實(shí)現(xiàn)我們想要的效果,如下圖:

 

效果

校驗(yàn)類型

校驗(yàn)規(guī)則 規(guī)則說明
@Null 限制只能為null
@NotNull 限制必須不為null
@AssertFalse 限制必須為false
@AssertTrue 限制必須為true
@DecimalMax(value) 限制必須為一個(gè)不大于指定值的數(shù)字
@DecimalMin(value) 限制必須為一個(gè)不小于指定值的數(shù)字
@Digits(integer,fraction) 限制必須為一個(gè)小數(shù),且整數(shù)部分的位數(shù)不能超過integer,小數(shù)部分的位數(shù)不能超過fraction
@Future 限制必須是一個(gè)將來的日期
@Max(value) 限制必須為一個(gè)不大于指定值的數(shù)字
@Min(value) 限制必須為一個(gè)不小于指定值的數(shù)字
@Past 驗(yàn)證注解的元素值(日期類型)比當(dāng)前時(shí)間早
@Pattern(value) 限制必須符合指定的正則表達(dá)式
@Size(max,min) 限制字符長度必須在min到max之間
@NotEmpty 驗(yàn)證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0)
@NotBlank 驗(yàn)證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時(shí)會(huì)去除字符串的空格
@Email 驗(yàn)證注解的元素值是Email,也可以通過正則表達(dá)式和flag指定自定義的email格式

Validation 支持如下幾種校驗(yàn),可以滿足基本的業(yè)務(wù)邏輯,當(dāng)然如果還是滿足不了你的業(yè)務(wù)邏輯,可以選擇定制校驗(yàn)規(guī)則。

定制校驗(yàn)邏輯

定義校驗(yàn)邏輯規(guī)則,實(shí)現(xiàn) org.springframework.validation.Validator

public class ConfigPropertiesValidator implements Validator {
    @Override
    public boolean supports(Class<?> aClass) {
        return AppConfigProperties.class.isAssignableFrom(aClass);
    }
     @Override
    public void validate(Object o, Errors errors) {
        AppConfigProperties config = (AppConfigProperties) o;
        if(StringUtils.isEmpty(config.getId())){
            errors.rejectValue("id", "app.id.empty", "[app.id] 屬性必須要在配置文件配置");
        }else if (config.getId().length() < 5) {
            errors.rejectValue("id", "app.id.short", "[app.id] 屬性的長度必須不能小于5");
        }
    }
}

使用自定義校驗(yàn)規(guī)則就不需要在使用原生的@NotEmpty了,將其刪除

@Validated
@Data
@ConfigurationProperties(prefix = "app")
@Component
public class AppConfigProperties {
//    @NotEmpty(message = "配置文件配置必須要配置[app.id]屬性")
    private String id;
}

注入自定義校驗(yàn)規(guī)則

@Bean
public  ConfigPropertiesValidator configurationPropertiesValidator(){
  return new ConfigPropertiesValidator();
}

注意:這里bean的方法名必須要 configurationPropertiesValidator,否則啟動(dòng)的時(shí)候不會(huì)執(zhí)行該校驗(yàn)

修改app.id配置,觀察啟動(dòng)情況

測(cè)試驗(yàn)證結(jié)果

錯(cuò)誤信息即為我們自定義校驗(yàn)的結(jié)果。

小結(jié)

通過配置Spring Boot啟動(dòng)校驗(yàn)功能,可以快速的識(shí)別參數(shù)配置的錯(cuò)誤,避免在使用組件的時(shí)候才發(fā)現(xiàn)問題,可以減少排查問題的工作量,并且在我們封裝自定義的starter時(shí)可以有更好的體驗(yàn)。

以上就是SpringBoot開發(fā)技巧啟動(dòng)時(shí)配置校驗(yàn)實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot啟動(dòng)時(shí)配置校驗(yàn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 使用postman傳遞list集合后臺(tái)springmvc接收

    使用postman傳遞list集合后臺(tái)springmvc接收

    這篇文章主要介紹了使用postman傳遞list集合后臺(tái)springmvc接收的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • mybatis-plus添加數(shù)據(jù)時(shí)id自增問題及解決

    mybatis-plus添加數(shù)據(jù)時(shí)id自增問題及解決

    這篇文章主要介紹了mybatis-plus添加數(shù)據(jù)時(shí)id自增問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 通過java反射機(jī)制動(dòng)態(tài)調(diào)用某方法的總結(jié)(推薦)

    通過java反射機(jī)制動(dòng)態(tài)調(diào)用某方法的總結(jié)(推薦)

    下面小編就為大家?guī)硪黄ㄟ^java反射機(jī)制動(dòng)態(tài)調(diào)用某方法的總結(jié)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • java運(yùn)行時(shí)數(shù)據(jù)區(qū)域和類結(jié)構(gòu)詳解

    java運(yùn)行時(shí)數(shù)據(jù)區(qū)域和類結(jié)構(gòu)詳解

    這篇文章主要介紹了java運(yùn)行時(shí)數(shù)據(jù)區(qū)域和類結(jié)構(gòu),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java8?Stream之groupingBy分組使用解讀

    Java8?Stream之groupingBy分組使用解讀

    這篇文章主要介紹了Java8?Stream之groupingBy分組使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringBoot條件注解@Conditional詳細(xì)解析

    SpringBoot條件注解@Conditional詳細(xì)解析

    這篇文章主要介紹了SpringBoot條件注解@Conditional詳細(xì)解析,@Conditional是Spring4.0提供的一個(gè)用于條件裝配的注解,其定義了一個(gè)Condition的數(shù)組,只有當(dāng)數(shù)組所有的條件都滿足的時(shí)候,組件才會(huì)被導(dǎo)入容器,需要的朋友可以參考下
    2023-11-11
  • Spring工作原理簡單探索

    Spring工作原理簡單探索

    這篇文章主要介紹了Spring工作原理簡單探索,涉及Springaop與IOC,動(dòng)態(tài)代理靜態(tài)代理,反射等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Eclipse快捷鍵使用小結(jié)

    Eclipse快捷鍵使用小結(jié)

    Eclipse是用java的同行必不可少的工具,我總結(jié)了一下它的快捷鍵,太常用的ctrl+單擊、ctrl+shift+F、Ctrl+1等我就不細(xì)說了,主要是方便查看。下邊小編就詳細(xì)的為大家介紹一下
    2013-07-07
  • Java編程中應(yīng)用的GUI設(shè)計(jì)基礎(chǔ)

    Java編程中應(yīng)用的GUI設(shè)計(jì)基礎(chǔ)

    這篇文章主要介紹了Java編程中應(yīng)用的GUI設(shè)計(jì)基礎(chǔ),為一些Java開發(fā)CS類型應(yīng)用的基礎(chǔ)概念知識(shí),需要的朋友可以參考下
    2015-10-10
  • BigDecimal divide除法除不盡報(bào)錯(cuò)的問題及解決

    BigDecimal divide除法除不盡報(bào)錯(cuò)的問題及解決

    這篇文章主要介紹了BigDecimal divide除法除不盡報(bào)錯(cuò)的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評(píng)論