SpringBoot 开发秘籍 - 启动时配置校验

本文介绍了如何在Spring项目中使用JavaValidation功能在项目启动时对配置文件中的参数进行校验,避免运行时因参数缺失导致的异常。通过@Validated和@ConfigurationProperties注解实现配置类的自动校验。
摘要由CSDN通过智能技术生成

在项目开发过程中,某个功能需要依赖在配置文件中配置的参数。这时候就可能出现下面这种现象问题:

有时候经常出现项目启动了,等到使用某个功能组件的时候出现异常,提示参数未配置或者bean注入失败。

有没有一种方法在项目启动时就对参数进行校验而不是在实际使用的时候再抛出提示呢?

答案就是使用Spring提供的Java Validation功能,简单实用。

增加启动校验


只需要在我们创建的配置Properties类增加Validation相关配置即可

@Validated

@Data

@ConfigurationProperties(prefix = “app”)

@Component

public class AppConfigProperties {

@NotEmpty(message = “配置文件配置必须要配置[app.id]属性”)

private String id;

}

上面的配置就会校验我们在 application.yml中有没有配置 app.id参数。如果在配置文件中没有该配置,项目启动就会失败,并抛出校验异常。

在使用配置文件校验时,必须使用@configurationproperties注解,@value不支持该注解。

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

@Autowired

private AppConfigProperties appConfigProperties;

这样就可以实现我们想要的效果,如下图:

效果

校验类型

| 校验规则 | 规则说明 |

| — | — |

| @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 | 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式 |

Validation 支持如下几种校验,可以满足基本的业务逻辑,当然如果还是满足不了你的业务逻辑,可以选择定制校验规则。

定制校验逻辑

  1. 定义校验逻辑规则,实现 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”);

}

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

总结

总的来说,面试是有套路的,一面基础,二面架构,三面个人。

最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友

三面蚂蚁金服成功拿到offer后,他说他累了

三面蚂蚁金服成功拿到offer后,他说他累了

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
希望也能帮助想进大厂的朋友**

[外链图片转存中…(img-Sw27YU1h-1712075965210)]

[外链图片转存中…(img-OeaI4Mpm-1712075965210)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值