Java 注意设置Spring引导配置属性时引发的异常

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

我注意到,当无法解析基本配置属性时,我的Spring Boot(1.3.2)应用程序将继续执行。下面是一个要说明的示例组件

@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
也不会查看该列表,除非有验证器。见: