我在application.yml中有以下内容:
perscel:
mail:
featuretoggle: true
以下字段:
@Value("${perscel.mail.featuretoggle}")
private final Boolean isFeatureActive;
结果:
be.cm.apps.press.perscel3.cron.CronJob中的构造函数参数7需要一个类型为'java.lang '的bean。找不到布尔值。
对意想不到的问题有点恼火,显然布尔字段被设置为true。
请注意,相同名称空间下的所有其他字段都被正确填充,实际上只有布尔字段导致了问题。
我没有额外的配置来读取属性文件
Spring boot starter xparent version 2.4.2
编辑:AllArgsConstructor由lombok注释。
我有以下属性:
@Value("${perscel.mail.featuretoggle}")
private final Boolean isFeatureActive;
@Value("#{'${perscel.mail.recipients.developers}'.split(',')}")
private final List<String> emailRecipientsDevelopers;
@Value("#{'${perscel.mail.recipients.admins}'.split(',')}")
private final List<String> emailRecipientsAdmins;
两个列表正常工作,我只在添加布尔值后出现问题。
请注意,Spring是在构造函数而不是字段注释上报错的。因此,这基本上是因为在Lombok自动生成的代码中构造函数参数上缺少@Value
注释。
你基本上有两个选择:
- 删除
@AllArgsConstructor
(和final
字段修饰符),标记为all用@Autowired
设置bean字段,让Spring设置字段 - 显式添加带有所有参数的构造函数,不依赖于龙目网自动生成的。而这个时间点
@Value
标注
问题是您将所有@Value
字段标记为final
。然后发生的是Lombok
将这些字段添加到构造函数中,因为您已经用@AllArgsConstructor
进行了注释。
当Spring
初始化这个bean时,Spring
假设构造函数中的所有文件都是Spring
管理的bean,Spring
尝试将它们autowire
到这个bean。
简单的解决方法是从这些字段中删除所有final
单词并删除@AllArgsConstructor
。删除@AllArgsConstructor
总是安全的,除非你完全知道Spring
bean里面到底在做什么。