Spring Boot 3.3中@ConfigurationProperties校验生效需三要素:类上加@Validated显式启用验证、嵌套字段加@Valid触发递归校验、配置类必须为Spring Bean;缺一不可,否则@NotBlank等注解被忽略,启动时抛BindValidationException。

要让 @ConfigurationProperties 生效并配合校验,关键不是“加注解就完事”,而是**声明验证意图 + 显式启用校验机制 + 正确嵌套触发**。Spring Boot 3.3 起,默认不执行字段级校验,必须主动开启。
必须加 @Validated
仅在类上写 @NotNull 或 @Min 是无效的。Spring Boot 3.3+ 要求配置类显式标注 @Validated,否则所有 JSR-380 注解(如 @NotBlank、@Email、@Range)会被忽略:
@ConfigurationProperties(prefix = "app.mail")@Validated // 缺少这行,校验完全不触发public class MailConfig {@NotBlank private String host;@Min(1024) private int port = 25;// getter/setter}
嵌套对象要加 @Valid
如果配置含层级结构(比如数据库里有连接池子项),内层类本身不会自动校验。必须在引用字段上加 @Valid,才能递归触发其内部约束:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
public class DataSourceConfig {@NotBlank private String url;@Valid // 关键:不加这行,PoolConfig里的@Min也不生效private PoolConfig pool;// ...}public class PoolConfig {@Min(1) private int minIdle = 1;@Max(20) private int maxActive = 10;}
确保配置类被 Spring 管理
校验只在 Spring 容器完成绑定时运行。所以类必须是 Spring Bean:
- 用
@Component+@ConfigurationProperties(推荐,简洁) - 或在
@Configuration类中用@Bean+@ConfigurationProperties(适合第三方类) - 若使用
@ConstructorBinding(不可变对象),仍需@Validated,且校验发生在构造阶段
错误提示会直接阻断启动
校验失败时,Spring Boot 不会静默跳过,而是抛出 BindValidationException 并打印清晰路径,例如:
或更典型的值违规:
Binding validation error on app.mail.port: rejected value [80]; codes [Min.app.mail.port,Min.port,Min.int,Min]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [app.mail.port,min]; arguments [min]; default message [min]]; default message [must be greater than or equal to 1024]

















