@Value boolean 返回值为 true 的“无效布尔值”

lpk*_*kej 0 java spring annotations spring-boot

我试图简单地从属性文件中获取值,一个false像这样的布尔值 :

@PropertySource("classpath:/conf/default/server.properties")
........
@Value("${startup.notify.enabled}")
private boolean enabled;
Run Code Online (Sandbox Code Playgroud)

在属性文件中:

startup.notify.enabled=true
Run Code Online (Sandbox Code Playgroud)

为什么我收到这个错误?

Caused by: java.lang.IllegalArgumentException: Invalid boolean value [${startup.notify.enabled}]
    at org.springframework.beans.propertyeditors.CustomBooleanEditor.setAsText(CustomBooleanEditor.java:123)
    at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:464)
    at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:437)
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:195)
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:125)
    at org.springframework.beans.TypeConverterSupport.doConvert(TypeConverterSupport.java:61)
Run Code Online (Sandbox Code Playgroud)

这可能是因为占位符"${startup.notify.enabled}"吗?

lpk*_*kej 9

@Value("#{new Boolean('${startup.notify.enabled}')}")
Run Code Online (Sandbox Code Playgroud)

奇迹般有效

编辑

如果您对与 一起使用的其他 int、String 等字段@ValuePropertySourcesPlaceholderConfigurer疑问,请确保您的配置文件中有。

@Bean
public static PropertySourcesPlaceholderConfigurer pspc() {
    return new PropertySourcesPlaceholderConfigurer();
}
Run Code Online (Sandbox Code Playgroud)