Date application.yaml和properties中的Spring启动日期处理

Date application.yaml和properties中的Spring启动日期处理,date,configuration,yaml,spring-boot,Date,Configuration,Yaml,Spring Boot,我正在创建一个简单的spring引导应用程序,它从application.yaml文件加载一个字符串(ISO日期),并尝试将其放入@Value注释字段中。 如果使用.yaml文件,字符串显然会转换为日期/日历,然后“ToString”转换为不同的格式。 如果使用.properties文件,字符串将按原样传递 应用 @EnableAutoConfiguration @Configuration @ComponentScan public class Application { publi

我正在创建一个简单的spring引导应用程序,它从application.yaml文件加载一个字符串(ISO日期),并尝试将其放入@Value注释字段中。 如果使用.yaml文件,字符串显然会转换为日期/日历,然后“ToString”转换为不同的格式。 如果使用.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);
     }
}
应用程序.yaml

dateString: 2015-01-09
=>输出:2015年1月9日星期五01:00:00 CET

应用程序属性

dateString=2015-01-09
=>输出:2015-01-09

对我来说,使用属性解决方案是可以的,但我不明白为什么会发生这种情况


(注意:尝试将yaml日期分配给日期字段时,将引发预期的“无法将[java.lang.String]类型的值转换为所需的[java.util.date]类型:未找到匹配的编辑器或转换策略”异常)这是因为Spring Boot使用SnakeYAML进行YAML解析,而SnakeYAML的默认行为是从它认为是时间戳的任何字符串创建
java.util.Date
。如果您有兴趣了解更多信息,请参阅SnakeYAML,了解更多详细信息,包括它用于标识时间戳的正则表达式。

谢谢,实际上这就是问题所在。尽管如此,我还是会称之为非常意外的行为,尤其是当日期被转换回字符串之后。这种行为也让我感到惊讶。我已经开门了