我正在使用 Spring boot 1.1.8,它使用 Spring 4.0.7。我正在使用 @Value 注释 Autowiring 我的类中的属性。如果属性文件中不存在该属性,我希望有一个默认值,所以我使用“:”来分配默认值。下面是示例:
@Value("${custom.data.export:false}")
private boolean exportData = true;
如果属性文件中不存在属性,则应将 false 分配给变量。但是,如果 属性存在于文件中,那么它也会分配默认值并忽略属性值。
例如。如果我已经像上面提到的那样定义了属性并且应用程序属性文件有这样的东西 custom.data.export=true 那么,exportData 的值将 仍然是错误的,而理想情况下它应该是正确的。
谁能指导我这里做错了什么?
谢谢
最佳答案
我们被以下具有完全相同症状的 Spring bug 咬伤:
[SPR-9989] Using multiple PropertyPlaceholderConfigurer breaks @Value default value behavior
基本上,如果 ApplicationContext 中存在多个 PropertyPlaceholderConfigurer,则只会解析预定义的默认值,不会发生覆盖。设置不同的 ignoreUnresolvablePlaceholders 值对此事没有影响,一旦我们删除了额外的 PropertyPlaceholderConfigurer,两个值(true/false)在这方面同样有效。
查看它,每个定义的 PropertyPlaceholderConfigurer 都按预期在内部解析了属性,但是 Spring 无法弄清楚要使用它们中的哪一个以便将值注入(inject) @值 带注释的字段/参数。
关于java - Spring Boot : Spring always assigns default value to property despite of it being present in . 属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28369582/