springboot 注入Date

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的扩展点之一

你可能感兴趣的:(springboot 注入Date)