Spring Boot yaml 文件中数字类型的 @Value

2023-11-30

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(使用前将#替换为@)

Spring Boot yaml 文件中数字类型的 @Value 的相关文章

随机推荐