當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot - 优雅的实现【应用启动参数校验】
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot - 优雅的实现【应用启动参数校验】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 需求
- 三部曲
- Step1 Properties類搞上Validation相關配置
- Step2 啟動測試
- Step3 配上試試
- 自定義校驗規則
- Step1 搞接口實現
- Step 2 搞屬性文件
- Step 3 搞自定義校驗規則
- Step 4 驗證一把
- 源碼
需求
有個參數非常非常非常非常非常重要,如果未配置 或者 配置不正確, 不能啟動應用。
我們使用Spring提供的Java Validation功能來實現這個“牛逼”的需求
三部曲
Step1 Properties類搞上Validation相關配置
package com.artisan.startvalidator.config;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import org.springframework.validation.annotation.Validated;import javax.validation.constraints.NotEmpty;/*** @author 小工匠* @version 1.0* @mark: show me the code , change the world*/@Validated @Component @Data @ConfigurationProperties(prefix = "artisan") public class ArtisanConfigProperties {@NotEmpty(message = "必須配置[artisan.code]屬性")private String code;}上面的配置就會校驗在application配置文件中有沒有配置artisan.code 。若沒有配置,項目啟動就會失敗,并拋出校驗異常。
溫馨小提示: 在使用配置文件校驗時,必須使用@configurationproperties注解,@value不支持該注解
Step2 啟動測試
Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'artisan' to com.artisan.startvalidator.config.ArtisanConfigProperties failed:Property: artisan.codeValue: nullReason: 必須配置[artisan.code]屬性Step3 配上試試
隨便搞個測試
當然了,根據你的需求,你也可以用框架提供的其他注解
| @Null | 限制只能為null |
| @NotNull | 限制必須不為null |
| @AssertFalse | 限制必須為false |
| @AssertTrue | 限制必須為true |
| @DecimalMax(value) | 限制必須為一個不大于指定值的數字 |
| @DecimalMin(value) | 限制必須為一個不小于指定值的數字 |
| @Digits(integer,fraction) | 限制必須為一個小數,且整數部分的位數不能超過integer,小數部分的位數不能超過fraction |
| @Future | 限制必須是一個將來的日期 |
| @Max(value) | 限制必須為一個不大于指定值的數字 |
| @Min(value) | 限制必須為一個不小于指定值的數字 |
| @Past | 驗證注解的元素值(日期類型)比當前時間早 |
| @Pattern(value) | 限制必須符合指定的正則表達式 |
| @Size(max,min) | 限制字符長度必須在min到max之間 |
| @NotEmpty | 驗證注解的元素值不為null且不為空(字符串長度不為0、集合大小不為0) |
| @NotBlank | 驗證注解的元素值不為空(不為null、去除首位空格后長度為0),不同于@NotEmpty,@NotBlank只應用于字符串且在比較時會去除字符串的空格 |
| 驗證注解的元素值是Email,也可以通過正則表達式和flag指定自定義的email格式 |
自定義校驗規則
當上面這些注解都滿足不了你的時候…
那干脆自定義一個
Step1 搞接口實現
自定義校驗邏輯規則,實現org.springframework.validation.Validator
package com.artisan.startvalidator.validator;import com.artisan.startvalidator.config.ArtisanConfigProperties; import org.springframework.util.StringUtils; import org.springframework.validation.Errors; import org.springframework.validation.Validator;/*** @author 小工匠* @version 1.0* @mark: show me the code , change the world*/ public class ArtisanCustomConfigPropertiesValidator implements Validator {@Overridepublic boolean supports(Class<?> clazz) {// 父類.class.isAssignableFrom(子類.class)return ArtisanConfigProperties.class.isAssignableFrom(clazz);}@Overridepublic void validate(Object target, Errors errors) {ArtisanConfigProperties config = (ArtisanConfigProperties) target;if (StringUtils.isEmpty(config.getCode())) {errors.rejectValue("code", "artisan.code.empty", "[artisan.code] 屬性必須要在配置文件application.properties中配置");} else if (config.getCode().length() < 8) {errors.rejectValue("id", "artisan.code.short", "[artisan.code] 屬性的長度需要大于8");}} }Step 2 搞屬性文件
使用自定義校驗規則就不需要在使用原生的@NotEmpty了, 刪除即可
Step 3 搞自定義校驗規則
注入自定義校驗規則, 寫個配置類,@Bean一把
package com.artisan.startvalidator.config;import com.artisan.startvalidator.validator.ArtisanCustomConfigPropertiesValidator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;/*** @author 小工匠* @version 1.0* @mark: show me the code , change the world*/@Configuration public class AppConfiguration {/*** bean的方法名必須要 configurationPropertiesValidator,否則啟動的時候不會執行該校驗** @return*/@Beanpublic ArtisanCustomConfigPropertiesValidator configurationPropertiesValidator() {return new ArtisanCustomConfigPropertiesValidator();} }bean的方法名必須要 configurationPropertiesValidator,否則不生效。
Step 4 驗證一把
改改application.properties 的 artisan.code
不配置試一下
可以看到錯誤信息就是自定義校驗的輸出
源碼
https://github.com/yangshangwei/boot2
總結
以上是生活随笔為你收集整理的SpringBoot - 优雅的实现【应用启动参数校验】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot - 优雅的实现【流
- 下一篇: SpringBoot - 优雅的实现【异