maj*_*ych 5 java spring yaml spring-boot
我得到了一个data.yml具有以下结构的资源文件夹:
main:
header:
info: 3600L
Run Code Online (Sandbox Code Playgroud)
我使用 Spring Boot 版本 2.4.2,我想将属性注入main.header1.info到字段中,我按以下方式执行此操作:
@Component
@PropertySource("classpath:data.yml")
public class SomeClass {
@Value("`main.header1.info")
private long info;
...
}
Run Code Online (Sandbox Code Playgroud)
但出现了一个NumberFormatException情况:
java.lang.NumberFormatException: For input string: "main.header1.info"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:na]
at java.base/java.lang.Long.parseLong(Long.java:692) ~[na:na]
...
Run Code Online (Sandbox Code Playgroud)
我知道long中不支持这一点yml,但我认为情况并非如此。我尝试了其他数字类型和相应的包装类,例如Double. 那么,如何解决这个问题呢?
我建议使用application.yml文件,尽管自定义YAML文件。
原因:
application.properties是spring的默认配置文件。如果您使用它,您不必担心手动将文件加载到上下文,因为 spring 会处理它。但是,在您的情况下,您正在尝试从自定义 YAML 文件加载和读取值。所以,@PropertySource这里无济于事。
有关 YAML 缺点的详细信息,请参阅spring-docs 。
但是,如果您仍然希望从自定义 yaml 中读取值,您将需要编写一个自定义类(例如CustomYamlPropertySourceFactory:)来实现PropertySourceFactory并通知@PropertySource使用此工厂类。
参考代码 :
@Component
@PropertySource(value = "classpath:date.yml", factory = CustomYamlPropertySourceFactory.class)
public class SomeClass {
@Value("${main.header.info}")
private int info;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7704 次 |
| 最近记录: |