springboot可以通过@Value进行配置参数的注入,就像下面这样
@Value("${date}")
private Date date
然后在application.yml中写入
date: 2020-07-05
启动的话会报错,因为不能直接把字符串转换为Date类型的数据。解决办法有两种。
@Value(("#{new java.text.SimpleDateFormat(\"yyyy-MM-dd\").parse('${date}')}"))
private Date date;
另外一种创建一个Bean,这个就用到了FactoryBean的知识点,可以将它理解为装饰器模式,
@Bean
public ConversionService conversionService() {
FormattingConversionServiceFactoryBean factory = new FormattingConversionServiceFactoryBean();
DateTimeFormatterRegistrar registrar = new DateTimeFormatterRegistrar();
registrar.setUseIsoFormat(true);
factory.setFormatterRegistrars(Collections.singleton(registrar));
factory.afterPropertiesSet();
return factory.getObject();
}
//再去注入
@Value("${startTime}")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
Date startTime;
FactoryBean
FactoryBean是一个接口,里面有个getObject方法,可以对返回的对象进行加工,从而可以实现注入Date的解析。更详细的解释查看参考资料吧。
参考资料:
Spring给bean注入日期属性的方法
Use Spring @Value annotation for injecting Date properties
SpringBoot配置文件日期属性转换实例
FactoryBean——Spring的扩展点之一