本篇文章給大家分享的是有關(guān)項(xiàng)目啟動時(shí)怎樣校驗(yàn)Spring Boot配置參數(shù),小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
冀州網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)于2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
在項(xiàng)目實(shí)際開發(fā)過程中,為了更好的復(fù)用,我們參考Spring Boot Starters,封裝了許多企業(yè)內(nèi)部中間件的starter。這些中間件的接入都需要申請并在項(xiàng)目中配置一些特定的參數(shù)。我們通過@ConfigurationProperties
注解,增加了在配置過程的體驗(yàn),實(shí)現(xiàn)屬性提示。一些參數(shù)是在中間件使用過程中的必選參數(shù),經(jīng)常發(fā)現(xiàn)項(xiàng)目啟動了,調(diào)用中間件時(shí)拋出異常,提示某個(gè)參數(shù)沒有配置。
這樣的接入過程體驗(yàn)很不好。
有沒有一種方式在項(xiàng)目啟動的時(shí)候就對配置的參數(shù)直接進(jìn)行校驗(yàn),而不是等到實(shí)際使用的時(shí)候再拋出錯(cuò)誤提示呢?
很幸運(yùn),Spring已經(jīng)為我們提供的Java Validation可以解決我們的問題。
在我們創(chuàng)建的Properties類中增加Validation相關(guān)配置:
/**
* ConfigProperties.
*
* @author Wang Jianchao(tinyking)
* <p>
* Created on 2020/8/20
*/
@Validated
@Data
@ConfigurationProperties(prefix = "config")
public class ConfigProperties {
@NotEmpty
private String name;
}
@Validated
是Spring提供的校驗(yàn)注解,通過該注解告訴Spring這個(gè)類是需要進(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();
}
}
上面的配置就會校驗(yàn)我們在application.yml
中有沒有配置config.name
參數(shù)。如果在配置文件中沒有該配置,項(xiàng)目啟動就會失敗,并拋出校驗(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
中,我們增加config.name
等配置項(xiàng),但是不給它設(shè)置內(nèi)容:
config:
name:
再次啟動項(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
Spring還支持我們進(jìn)行自定義校驗(yàn)規(guī)則,通過自定義校驗(yàn)可以實(shí)現(xiàn)復(fù)雜的校驗(yàn)邏輯。
我們創(chuàng)建一個(gè)校驗(yàn)類,并實(shí)現(xiàn)Validator接口:
/**
* ConfigPropertiesValidator.
*
* @author Wang Jianchao(tinyking)
* <p>
* 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)
方法用來判斷是否支持當(dāng)前正在進(jìn)行校驗(yàn)的實(shí)例validate(Object target, Errors errors)
方法中寫實(shí)際的校驗(yàn)規(guī)則,并用
errors
收集錯(cuò)誤信息接下來就是如何在Spring Boot啟動時(shí),對Properties進(jìn)行校驗(yàn)了。這一步非常關(guān)鍵!
@Bean
public static ConfigPropertiesValidator configurationPropertiesValidator() {
return new ConfigPropertiesValidator();
}
其中有兩個(gè)注意點(diǎn):
configurationPropertiesValidator
,否則在啟動的時(shí)候不會執(zhí)行該校驗(yàn)static
, 告訴Spring,該Bean的創(chuàng)建要在所有的Configuration之前我們修改在application.yml
中config.name
:
config:
name: a
這樣,name長度就不能滿足我們自定義的校驗(yàn)規(guī)則,啟動程序,查看結(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é)果。
通過配置Spring Boot啟動校驗(yàn)功能,可以快速的識別參數(shù)配置的錯(cuò)誤,使我們在開發(fā)過程中有更好starter集成體驗(yàn)。
以上就是項(xiàng)目啟動時(shí)怎樣校驗(yàn)Spring Boot配置參數(shù),小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)站名稱:項(xiàng)目啟動時(shí)怎樣校驗(yàn)SpringBoot配置參數(shù)
路徑分享:http://www.rwnh.cn/article26/jdcgjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、網(wǎng)頁設(shè)計(jì)公司、域名注冊、網(wǎng)站策劃、虛擬主機(jī)、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)