无法识别Spring启动yaml属性布尔值



我在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注释。

你基本上有两个选择:

  1. 删除@AllArgsConstructor(和final字段修饰符),标记为all用@Autowired设置bean字段,让Spring设置字段
  2. 显式添加带有所有参数的构造函数,不依赖于龙目网自动生成的。而这个时间点@Value标注

问题是您将所有@Value字段标记为final。然后发生的是Lombok将这些字段添加到构造函数中,因为您已经用@AllArgsConstructor进行了注释。

Spring初始化这个bean时,Spring假设构造函数中的所有文件都是Spring管理的bean,Spring尝试将它们autowire到这个bean。

简单的解决方法是从这些字段中删除所有final单词并删除@AllArgsConstructor。删除@AllArgsConstructor总是安全的,除非你完全知道Springbean里面到底在做什么。

相关内容

  • 没有找到相关文章

最新更新