您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關項目啟動時怎樣校驗Spring Boot配置參數,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
在項目實際開發過程中,為了更好的復用,我們參考Spring Boot Starters,封裝了許多企業內部中間件的starter。這些中間件的接入都需要申請并在項目中配置一些特定的參數。我們通過@ConfigurationProperties
注解,增加了在配置過程的體驗,實現屬性提示。一些參數是在中間件使用過程中的必選參數,經常發現項目啟動了,調用中間件時拋出異常,提示某個參數沒有配置。
這樣的接入過程體驗很不好。
有沒有一種方式在項目啟動的時候就對配置的參數直接進行校驗,而不是等到實際使用的時候再拋出錯誤提示呢?
很幸運,Spring已經為我們提供的Java Validation可以解決我們的問題。
在我們創建的Properties類中增加Validation相關配置:
/**
* 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提供的校驗注解,通過該注解告訴Spring這個類是需要進行校驗處理的。
@NotEmpty
是Java Validation API中提供的校驗注解,表示name
字段不能為空。不能為空是指不能是null,也不能是空字符串。
配置Bean
@Configuration
@EnableConfigurationProperties(ConfigProperties.class)
public class ValidationConfiguration {
@Bean
public ConfigProperties configProperties() {
return new ConfigProperties();
}
}
上面的配置就會校驗我們在application.yml
中有沒有配置config.name
參數。如果在配置文件中沒有該配置,項目啟動就會失敗,并拋出校驗異常:
***************************
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
等配置項,但是不給它設置內容:
config:
name:
再次啟動項目,發現錯誤信息發生了變化:
***************************
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還支持我們進行自定義校驗規則,通過自定義校驗可以實現復雜的校驗邏輯。
我們創建一個校驗類,并實現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)
方法用來判斷是否支持當前正在進行校驗的實例validate(Object target, Errors errors)
方法中寫實際的校驗規則,并用
errors
收集錯誤信息接下來就是如何在Spring Boot啟動時,對Properties進行校驗了。這一步非常關鍵!
@Bean
public static ConfigPropertiesValidator configurationPropertiesValidator() {
return new ConfigPropertiesValidator();
}
其中有兩個注意點:
configurationPropertiesValidator
,否則在啟動的時候不會執行該校驗static
, 告訴Spring,該Bean的創建要在所有的Configuration之前我們修改在application.yml
中config.name
:
config:
name: a
這樣,name長度就不能滿足我們自定義的校驗規則,啟動程序,查看結果:
***************************
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
錯誤信息即為我們自定義校驗的結果。
通過配置Spring Boot啟動校驗功能,可以快速的識別參數配置的錯誤,使我們在開發過程中有更好starter集成體驗。
以上就是項目啟動時怎樣校驗Spring Boot配置參數,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。