I got a data.yml
在以下结构的资源文件夹中:
main:
header:
info: 3600L
我使用Spring Boot版本2.4.2,我想注入属性main.header1.info
对于一个字段,我按以下方式执行此操作:
@Component
@PropertySource("classpath:data.yml")
public class SomeClass {
@Value("`main.header1.info")
private long info;
...
}
But a 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]
...
我知道long
不支持yml
,但我认为事实并非如此。我尝试了其他数字类型和相应的包装类,例如Double
。
那么,如何解决这个问题呢?
我建议使用application.yml
尽管有自定义文件YAML
file.
Reason : application.properties
是spring的默认配置文件。如果你使用它,你不必担心加载文件到
手动上下文,因为 spring 会处理它。但是,就你而言,你是
尝试从自定义 YAML 文件加载和读取值。所以,@PropertySource
在这里没有帮助。
请参阅spring 文档有关 YAML 缺点的详细信息。
但是,如果您仍然希望从自定义 yaml 中读取值,您将需要编写一个自定义类(例如:CustomYamlPropertySourceFactory
)它实现了PropertySourceFactory
& 通知@PropertySource
使用这个工厂类。
参考代码 :
@Component
@PropertySource(value = "classpath:date.yml", factory = CustomYamlPropertySourceFactory.class)
public class SomeClass {
@Value("${main.header.info}")
private int info;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)