Spring application.yaml 和属性中的启动日期处理
Spring boot date handling in application.yaml and properties
我正在创建一个简单的 spring 引导应用程序,它从 application.yaml 文件加载一个字符串(ISO 日期)并尝试将其放入一个 @Value 注释字段中。
如果我使用 .yaml 文件,字符串显然会转换为 date/calendar,然后 "toStringed" 会转换为不同的格式。
如果我使用 .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 分配给日期字段时,会抛出预期的 "Cannot convert value of type [java.lang.String] to required type [java.util.Date]: no matching editors or conversion strategy found" 异常)
这是因为 Spring Boot 使用 SnakeYAML 进行 YAML 解析,而 SnakeYAML 的默认行为是从它认为是时间戳的任何字符串创建 java.util.Date
。如果您有兴趣了解更多信息,请参阅 SnakeYAML 的 Resolver class 了解更多详细信息,包括它用于识别时间戳的正则表达式。
我正在创建一个简单的 spring 引导应用程序,它从 application.yaml 文件加载一个字符串(ISO 日期)并尝试将其放入一个 @Value 注释字段中。 如果我使用 .yaml 文件,字符串显然会转换为 date/calendar,然后 "toStringed" 会转换为不同的格式。 如果我使用 .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 分配给日期字段时,会抛出预期的 "Cannot convert value of type [java.lang.String] to required type [java.util.Date]: no matching editors or conversion strategy found" 异常)
这是因为 Spring Boot 使用 SnakeYAML 进行 YAML 解析,而 SnakeYAML 的默认行为是从它认为是时间戳的任何字符串创建 java.util.Date
。如果您有兴趣了解更多信息,请参阅 SnakeYAML 的 Resolver class 了解更多详细信息,包括它用于识别时间戳的正则表达式。