Java 注意设置Spring引导配置属性时引发的异常
我注意到,当无法解析基本配置属性时,我的Spring Boot(1.3.2)应用程序将继续执行。下面是一个要说明的示例组件Java 注意设置Spring引导配置属性时引发的异常,java,validation,configuration,spring-boot,Java,Validation,Configuration,Spring Boot,我注意到,当无法解析基本配置属性时,我的Spring Boot(1.3.2)应用程序将继续执行。下面是一个要说明的示例组件 @Service @EnableConfigurationProperties(Runner.RunnerConfiguration.class) public class Runner implements CommandLineRunner { @ConfigurationProperties(prefix = "runner") public static
@Service
@EnableConfigurationProperties(Runner.RunnerConfiguration.class)
public class Runner implements CommandLineRunner {
@ConfigurationProperties(prefix = "runner")
public static class RunnerConfiguration {
private ZonedDateTime theTime;
public void setTheTime(String theTime) {
try {
this.theTime = ZonedDateTime.parse(theTime);
} catch (DateTimeParseException e) {
throw new IllegalArgumentException("Failed to parse string", e);
}
}
public ZonedDateTime getTheTime() {
return theTime;
}
}
@Autowired
RunnerConfiguration config;
@Override
public void run(String... args) {
System.out.println("The time = " + config.getTheTime());
}
}
当我用这个组件运行一个SpringBootApplication
并在命令行上传递--runner.theTime=now
时,我预计应用程序会失败,出现一个IllegalArgumentException
,因为无法解析“now”。但是,应用程序会继续运行,输出为:
The time = null
我能够使失败发生的方法是将验证器bean作为应用程序的一部分注入。验证器不必验证任何东西
@Bean
public Validator configurationPropertiesValidator() {
return new Validator() {
@Override
public boolean supports(Class<?> clazz) {
return true;
}
@Override
public void validate(Object target, Errors errors) {
}
};
}
@Bean
公共验证器配置PropertiesValidator(){
返回新的验证器(){
@凌驾
公共布尔支持(类clazz){
返回true;
}
@凌驾
公共无效验证(对象目标、错误){
}
};
}
我查看了Spring启动代码,看起来即使捕获了IllegalArgumentException
并将其添加到绑定结果中保存的异常列表中,PropertiesConfiguration Factory
也不会查看该列表,除非有验证器。见: