Java ConfigurationProperties将属性名称与yaml文件中的数字绑定
我是Spring Boot新手,在将application.yml文件中的属性值绑定到用Java ConfigurationProperties将属性名称与yaml文件中的数字绑定,java,spring,spring-boot,yaml,Java,Spring,Spring Boot,Yaml,我是Spring Boot新手,在将application.yml文件中的属性值绑定到用@configurationproperties注释的类时遇到问题 在application.yml中: aaa: what-1word-is: true 在@ConfigurationProperties注释类中: @Data @Configuration @ConfigurationProperties(prefix = "aaa") public class Test { private
@configurationproperties
注释的类时遇到问题
在application.yml中:
aaa:
what-1word-is: true
在@ConfigurationProperties
注释类中:
@Data
@Configuration
@ConfigurationProperties(prefix = "aaa")
public class Test
{
private boolean what1WordIs;
}
我试过用不同的名字来命名,
但它们都不起作用;
what1words
总是false
。
我试过的名字,
what-1-word-is
,
what-1word-is
,
什么是单词
,
what-1Word-is
。
只有what1WordIs
起作用(将配置类中的what1WordIs
设置为true
)
Spring能够在属性名称中绑定一个数字吗?我将提出一些不同于was的问题。我可能建议不允许在属性文件中使用数字 如果可能,您可以尝试将属性名称设置为如下所示:
aaa:
哪个单词是
或者再短一点:
aaa:
单个单词
免责声明 这不是你想要的答案, 但这可能是问题的解决办法 关于我的一切
我不喜欢
@ConfigurationProperties
绑定技术
(您正在使用的)。
为了我,
它似乎“太神奇了”。
相反
我更喜欢在每个属性上使用@Value
注释
试试看尝试在
what1WordIs
字段上使用以下注释:
@Value("${aaa.what-1word-is}")
private boolean what1WordIs;
它应该会起作用。
我已经试过了,它对我有效。即使是“一个字是什么”
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
顺便说一句:Spring允许我们在配置文件中使用不同的属性名。我已经试过了你提到的所有方法,效果很好。(更多:)
BTW2:如果您想查看Spring希望您将哪些属性添加到依赖项中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
此外,IDE将能够为您自动完成:)
BTW3:请检查,您是否使用Lombok库中的@Data
我希望它仍然是实际的:)正如@Alexander Polozov回答中提到的,实际的属性名称(因为您使用的是YAML配置)是
aaa。what-1-word-is
。前缀很重要。谢谢你的建议。我忘了在问题中添加prefix=“aaa”
,但我在codeThx中确实有建议!我用其他字符替换了数字,它仍然有效。可能需要进一步挖掘它实际上是如何工作的,对spring配置元数据的引用。json
(以及如何获得它:-p)是一个救命恩人!:-)
{
"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": []
}