真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

項(xiàng)目啟動(dòng)時(shí)怎樣校驗(yàn)SpringBoot配置參數(shù)

本篇文章給大家分享的是有關(guān)項(xiàng)目啟動(dòng)時(shí)怎樣校驗(yàn)Spring Boot配置參數(shù),小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著小編一起來(lái)看看吧。

冀州網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)于2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

 

1. 概述

在項(xiàng)目實(shí)際開(kāi)發(fā)過(guò)程中,為了更好的復(fù)用,我們參考Spring Boot Starters,封裝了許多企業(yè)內(nèi)部中間件的starter。這些中間件的接入都需要申請(qǐng)并在項(xiàng)目中配置一些特定的參數(shù)。我們通過(guò)@ConfigurationProperties注解,增加了在配置過(guò)程的體驗(yàn),實(shí)現(xiàn)屬性提示。一些參數(shù)是在中間件使用過(guò)程中的必選參數(shù),經(jīng)常發(fā)現(xiàn)項(xiàng)目啟動(dòng)了,調(diào)用中間件時(shí)拋出異常,提示某個(gè)參數(shù)沒(méi)有配置。

這樣的接入過(guò)程體驗(yàn)很不好。

有沒(méi)有一種方式在項(xiàng)目啟動(dòng)的時(shí)候就對(duì)配置的參數(shù)直接進(jìn)行校驗(yàn),而不是等到實(shí)際使用的時(shí)候再拋出錯(cuò)誤提示呢?

很幸運(yùn),Spring已經(jīng)為我們提供的Java Validation可以解決我們的問(wèn)題。

 

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

在我們創(chuàng)建的Properties類(lèi)中增加Validation相關(guān)配置:

/**
* ConfigProperties.
*
* @author Wang Jianchao(tinyking)
*


* Created on 2020/8/20
*/
@Validated
@Data
@ConfigurationProperties(prefix = "config")
public class ConfigProperties {
   @NotEmpty
   private String name;
}

 

@Validated是Spring提供的校驗(yàn)注解,通過(guò)該注解告訴Spring這個(gè)類(lèi)是需要進(jìn)行校驗(yàn)處理的。

@NotEmpty 是Java Validation API中提供的校驗(yàn)注解,表示name字段不能為空。不能為空是指不能是null,也不能是空字符串。

配置Bean

@Configuration
@EnableConfigurationProperties(ConfigProperties.class)
public class ValidationConfiguration {

   @Bean
   public ConfigProperties configProperties() {
       return new ConfigProperties();
   }
}

 

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

***************************
APPLICATION FAILED TO START
***************************

Description:

Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'config' to io.github.tinyking.springvalidation.config.ConfigProperties failed:

   Property: config.name
   Value: null
   Reason: 不能為空

 

application.yml中,我們?cè)黾?code>config.name等配置項(xiàng),但是不給它設(shè)置內(nèi)容:

config:
name:
 

再次啟動(dòng)項(xiàng)目,發(fā)現(xiàn)錯(cuò)誤信息發(fā)生了變化:

***************************
APPLICATION FAILED TO START
***************************

Description:

Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'config' to io.github.tinyking.springvalidation.config.ConfigProperties failed:

   Property: config.name
   Value:
   Origin: class path resource [application.yml]:2:8
   Reason: 不能為空


Action:

Update your application's configuration
   

3. 自定義校驗(yàn)

Spring還支持我們進(jìn)行自定義校驗(yàn)規(guī)則,通過(guò)自定義校驗(yàn)可以實(shí)現(xiàn)復(fù)雜的校驗(yàn)邏輯。

我們創(chuàng)建一個(gè)校驗(yàn)類(lèi),并實(shí)現(xiàn)Validator接口:

/**
* ConfigPropertiesValidator.
*
* @author Wang Jianchao(tinyking)
*


* Created on 2020/8/20
*/
public class ConfigPropertiesValidator implements Validator {
   @Override
   public boolean supports(Class aClass) {
       return ConfigProperties.class.isAssignableFrom(aClass);
   }

   @Override
   public void validate(Object target, Errors errors) {
       ConfigProperties config = (ConfigProperties) target;

       if (!StringUtils.isEmpty(config.getName()) && config.getName().length() < 5) {
           errors.rejectValue("name", "name.too.shot", "name is too shot");
       }
   }
}

 

需要注意的是,上面的Validator接口是Spring框架提供的,不是Java Validation API中的接口。

  • supports(Class aClass)方法用來(lái)判斷是否支持當(dāng)前正在進(jìn)行校驗(yàn)的實(shí)例
  • validate(Object target, Errors errors)方法中寫(xiě)實(shí)際的校驗(yàn)規(guī)則,并用     errors收集錯(cuò)誤信息

接下來(lái)就是如何在Spring Boot啟動(dòng)時(shí),對(duì)Properties進(jìn)行校驗(yàn)了。這一步非常關(guān)鍵!

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

其中有兩個(gè)注意點(diǎn):

  • 方法名必須為     configurationPropertiesValidator ,否則在啟動(dòng)的時(shí)候不會(huì)執(zhí)行該校驗(yàn)
  • 方法必須聲明為     static, 告訴Spring,該Bean的創(chuàng)建要在所有的Configuration之前

我們修改在application.ymlconfig.name

config:
name: a
 

這樣,name長(zhǎng)度就不能滿(mǎn)足我們自定義的校驗(yàn)規(guī)則,啟動(dòng)程序,查看結(jié)果:

***************************
APPLICATION FAILED TO START
***************************

Description:

Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'config' to io.github.tinyking.springvalidation.config.ConfigProperties failed:

   Property: config.name
   Value: a
   Origin: class path resource [application.yml]:2:9
   Reason: name is too shot


Action:

Update your application's configuration

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

通過(guò)配置Spring Boot啟動(dòng)校驗(yàn)功能,可以快速的識(shí)別參數(shù)配置的錯(cuò)誤,使我們?cè)陂_(kāi)發(fā)過(guò)程中有更好starter集成體驗(yàn)。

以上就是項(xiàng)目啟動(dòng)時(shí)怎樣校驗(yàn)Spring Boot配置參數(shù),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前題目:項(xiàng)目啟動(dòng)時(shí)怎樣校驗(yàn)SpringBoot配置參數(shù)
文章轉(zhuǎn)載:http://weahome.cn/article/jdcgjg.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部