application.yaml和properties中的Spring引导日期处理

时间:2015-01-26 20:00:46

标签: date configuration yaml spring-boot

我正在创建一个简单的spring启动应用程序,它从application.yaml文件加载一个字符串(ISO-date)并尝试将其放入@Value注释字段。 如果我使用.yaml文件,字符串显然会转换为日期/日历,然后转换为#Stringed"变成另一种格式。 如果我使用.properties文件,则字符串按原样传递。

应用

@EnableAutoConfiguration
@Configuration
@ComponentScan
public class Application {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(Application.class, args);
        SampleComponent c = ctx.getBean(SampleComponent.class);
        c.bla();
    }
}

应配置的组件

@Component
public class SampleComponent {

     @Value("${dateString}")
     private String dateString;

     public void bla() {
        System.out.println(dateString);
     }
}

application.yaml

dateString: 2015-01-09

=>输出:Fri Jan 09 01:00:00 CET 2015

application.properties

dateString=2015-01-09

=>输出:2015-01-09

对我来说,使用属性解决方案很好,但我不明白为什么会这样?

(注意:当尝试将yaml-date分配给日期字段时,预期"无法将[java.lang.String]类型的值转换为必需类型[java.util.Date]:没有匹配的编辑器或发现转换策略"抛出异常)

1 个答案:

答案 0 :(得分:2)

它正在发生,因为Spring Boot使用SnakeYAML进行YAML解析,而SnakeYAML的默认行为是从它认为是时间戳的任何字符串创建java.util.Date。如果您对了解更多内容感兴趣,请参阅SnakeYAML的Resolver class以获取更多详细信息,包括用于标识时间戳的正则表达式。