最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

概述

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

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

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

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

增加啟動校驗(yàn)

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

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

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

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

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

@Autowired
private AppConfigProperties appConfigProperties;

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

 

效果

校驗(yàn)類型

校驗(yàn)規(guī)則 規(guī)則說明
@Null 限制只能為null
@NotNull 限制必須不為null
@AssertFalse 限制必須為false
@AssertTrue 限制必須為true
@DecimalMax(value) 限制必須為一個不大于指定值的數(shù)字
@DecimalMin(value) 限制必須為一個不小于指定值的數(shù)字
@Digits(integer,fraction) 限制必須為一個小數(shù),且整數(shù)部分的位數(shù)不能超過integer,小數(shù)部分的位數(shù)不能超過fraction
@Future 限制必須是一個將來的日期
@Max(value) 限制必須為一個不大于指定值的數(shù)字
@Min(value) 限制必須為一個不小于指定值的數(shù)字
@Past 驗(yàn)證注解的元素值(日期類型)比當(dāng)前時間早
@Pattern(value) 限制必須符合指定的正則表達(dá)式
@Size(max,min) 限制字符長度必須在min到max之間
@NotEmpty 驗(yàn)證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0)
@NotBlank 驗(yàn)證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應(yīng)用于字符串且在比較時會去除字符串的空格
@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,否則啟動的時候不會執(zhí)行該校驗(yàn)

修改app.id配置,觀察啟動情況

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

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

小結(jié)

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

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

相關(guān)文章

  • Java scala模式匹配機(jī)制詳解

    Java scala模式匹配機(jī)制詳解

    模式匹配語法中,采用match關(guān)鍵字聲明,每個分支采用case關(guān)鍵字進(jìn)行聲明,當(dāng)需要匹配時,會從第一個case分支開始,如果匹配成功,那么執(zhí)行對應(yīng)的邏輯代碼,如果匹配不成功,繼續(xù)執(zhí)行下一個分支進(jìn)行判斷
    2023-02-02
  • Java e.printStackTrace()案例講解

    Java e.printStackTrace()案例講解

    這篇文章主要介紹了Java e.printStackTrace()案例講解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 關(guān)于Gateway路由匹配規(guī)則解讀

    關(guān)于Gateway路由匹配規(guī)則解讀

    本文詳細(xì)介紹了SpringCloudGateway的路由匹配規(guī)則,包括基本概念、常用屬性、實(shí)際應(yīng)用以及注意事項(xiàng),路由匹配規(guī)則決定了請求如何被轉(zhuǎn)發(fā)到目標(biāo)服務(wù),是Gateway的核心功能之一,在配置路由時需要注意順序、性能和安全性
    2025-02-02
  • 詳解Java變量與常量

    詳解Java變量與常量

    這篇文章主要介紹了Java變量與常量,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 教你怎么用Java實(shí)現(xiàn)給圖片打上水印

    教你怎么用Java實(shí)現(xiàn)給圖片打上水印

    這篇文章主要介紹了教你怎么用Java實(shí)現(xiàn)給圖片打上水印,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • SpringBoot--Banner的定制和關(guān)閉操作

    SpringBoot--Banner的定制和關(guān)閉操作

    這篇文章主要介紹了SpringBoot--Banner的定制和關(guān)閉操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2018-05-05
  • 解決springboot3:mybatis-plus依賴錯誤:org.springframework.beans.factory.UnsatisfiedDependencyException

    解決springboot3:mybatis-plus依賴錯誤:org.springframework.beans.fac

    這篇文章主要介紹了解決springboot3:mybatis-plus依賴錯誤:org.springframework.beans.factory.UnsatisfiedDependencyException問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java用POI導(dǎo)入導(dǎo)出Excel實(shí)例分析

    Java用POI導(dǎo)入導(dǎo)出Excel實(shí)例分析

    在本篇文章里小編給大家整理的是一篇關(guān)于Java用POI導(dǎo)入導(dǎo)出Excel實(shí)例分析內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。
    2021-11-11
  • java常用工具類 數(shù)字工具類

    java常用工具類 數(shù)字工具類

    這篇文章主要為大家詳細(xì)介紹了java常用工具類中的數(shù)字工具類,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • Spring boot應(yīng)用啟動后首次訪問很慢的解決方案

    Spring boot應(yīng)用啟動后首次訪問很慢的解決方案

    這篇文章主要介紹了Spring boot應(yīng)用啟動后首次訪問很慢的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論

偃师市| 汾阳市| 大方县| 武邑县| 邻水| 罗田县| 城口县| 盐山县| 绵竹市| 抚远县| 康平县| 道孚县| 丰镇市| 宜春市| 左贡县| 三台县| 临沧市| 山丹县| 金坛市| 山东省| 曲麻莱县| 梁山县| 鲁甸县| 庆阳市| 新平| 历史| 翁源县| 谢通门县| 射阳县| 宁波市| 安平县| 隆尧县| 普安县| 驻马店市| 北票市| 昂仁县| 鸡西市| 金塔县| 荣昌县| 乾安县| 乡城县|