我是Spring-Boot的新手,在将application.yml文件中的属性值绑定到以@ConfigurationProperies
注释的类时遇到问题。
在application.yml中:
aaa:
what-1word-is: true
在带有@ConfigurationProperties
注释的类中:
@Data
@Configuration
@ConfigurationProperties(prefix = "aaa")
public class Test
{
private boolean what1WordIs;
}
我尝试使用该属性的其他名称,
但是它们都不起作用;
what1WordIs
始终为false
。
我试过的名字
what-1-word-is
,
what-1word-is
,
what1-word-is
,
what-1Word-is
。
仅what1-word-is
有效(将配置类中的what1WordIs
设置为true
)
Spring可以将名称中带有数字的属性绑定吗?
答案 0 :(得分:1)
我将提出与要求不同的建议。我可能建议在属性文件中不允许数字。
如果可能,您可能会尝试将属性名称设置为如下所示:
aaa:
what-single-word-is
或者更短一些:
aaa:
single-word
Can't read yaml's complex object using @ConfigurationProperties. Integer cannot be cast to String
答案 1 :(得分:1)
应该可以。 我已经尝试过了,并且对我有用。即使是“ 1个单词是什么”。
application.yml
aaa:
what-1-word-is: true
Config.class
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@Component
@ConfigurationProperties(prefix = "aaa")
@Data
public class Config {
private boolean what1WordIs;
@PostConstruct
public void init(){
System.out.println("CONFIG :: "+this);
}
}
结果我们可以看到:
CONFIG :: Config(what1WordIs=true)
我认为您遇到了这个问题,因为您使用@Configuration注释而不是@Component。
BTW:Spring允许我们在配置文件中使用不同的属性名称。我已经尝试了您提到的所有选项,并且可以使用。 (更多:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-relaxed-binding)
BTW2:如果要查看spring期望的属性,可以添加以下内容:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
它将在描述所有属性的spring-configuration-metadata.json
目录中生成/target/classes/META-INF
。
示例:
{
"groups": [
{
"name": "aaa",
"type": "com.supra89kren.test_spring.configurtion.Config",
"sourceType": "com.supra89kren.test_spring.configurtion.Config"
}
],
"properties": [
{
"name": "aaa.what1-word-is",
"type": "java.lang.Boolean",
"sourceType": "com.supra89kren.test_spring.configurtion.Config",
"defaultValue": false
}
],
"hints": []
}
此外,IDE将能够为您自动完成:)
BTW3:请检查是否使用了来自lombok库的@Data。
我希望它仍然是现实的:)
答案 2 :(得分:0)
免责声明
这不是您要寻找的答案,
但这可能是解决该问题的方法。
关于我的一切
我不喜欢@ConfigurationProperties
绑定技术
(您正在使用的)。
为了我,
似乎“太神奇了”。
代替,
我更喜欢在每个属性上使用@Value
注释。
试试看
尝试在what1WordIs
字段上使用以下注释:
@Value("${aaa.what-1word-is}")
private boolean what1WordIs;