绑定application.properties时如何强制指定字符串配置项为必填?
实现方案
方案1:使用Spring Validation校验(推荐)
这是Spring生态原生支持的简便方案,操作步骤如下:
- 第一步:引入校验依赖
如果使用Spring Boot 2.3及以上版本,需要手动引入校验 starter 依赖,Maven配置示例:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
- 第二步:修改配置类启用校验
在@ConfigurationProperties标注的Bean方法上添加@Validated注解:
@Configuration public class FirstConfiguration { @Bean @Validated @ConfigurationProperties("input.param") Data buildDataBean() { return new Data(); } }
- 第三步:给POJO字段添加非空校验规则
使用@NotBlank注解标注不允许为空的字符串字段,该注解会校验字段不能为null、也不能是空字符串/全空格字符串:
// Spring Boot 3.x 用jakarta.validation.constraints.NotBlank // Spring Boot 2.x 用javax.validation.constraints.NotBlank import jakarta.validation.constraints.NotBlank; public class Data { @NotBlank(message = "input.param.resolution 配置不能为空") String resolution; @NotBlank(message = "input.param.size 配置不能为空") String size; // getters and setters }
配置完成后,如果对应配置项缺失或者值为空,Spring Boot启动时就会抛出校验异常,直接终止启动流程。
方案2:实现InitializingBean接口手动校验
如果不想额外引入校验依赖,也可以让POJO实现InitializingBean接口,在属性填充完成后手动校验:
import org.springframework.beans.factory.InitializingBean; public class Data implements InitializingBean { String resolution; String size; @Override public void afterPropertiesSet() throws Exception { if (resolution == null || resolution.isBlank()) { throw new IllegalArgumentException("input.param.resolution 配置不能为空"); } if (size == null || size.isBlank()) { throw new IllegalArgumentException("input.param.size 配置不能为空"); } } // getters and setters }
这种方式同样会在属性绑定完成后执行校验,不符合要求就抛出异常终止启动。
内容的提问来源于stack exchange,提问作者electrode
相关产品推荐
相关产品推荐

