Spring 嵌套类中的ConfigurationProperties

Spring 嵌套类中的ConfigurationProperties,spring,spring-boot,Spring,Spring Boot,以下是yml app: a: prop: aaa b: prop: bbb @组件 公共抽象类公共{ @值(“${prop}”) 私人弦道具; @配置属性(prefix=“app.a”) @PropertySource(“类路径:app.yml”) @组成部分 公共静态类A扩展了公共{ } @配置属性(前缀=“app.b”) @PropertySource(“类路径:app.yml”) @组成部分 公共静态类B扩展了公共{ } } 但是对于a或b,这两个类具有相同的值

以下是yml

app:
  a:
    prop: aaa
  b:
    prop: bbb
@组件
公共抽象类公共{
@值(“${prop}”)
私人弦道具;
@配置属性(prefix=“app.a”)
@PropertySource(“类路径:app.yml”)
@组成部分
公共静态类A扩展了公共{
}
@配置属性(前缀=“app.b”)
@PropertySource(“类路径:app.yml”)
@组成部分
公共静态类B扩展了公共{
}
}
但是对于
a
b
,这两个类具有相同的值


如何解决此问题?

您可以使用配置参数列表:

app:
  props: 
    - key: a
      value: aaa

    - key: b
      value: bbb
并在单独的bean中以更复杂的方式检索您的价值:

@ConfigurationProperties(prefix = "app")
public class CommonConfiguration {
    List<Prop> props;
    //Getters and setters
    public Prop retreiveSpecificConfiguration(String className) {
        //some kind of logic here
    }

    public static class Prop {
      private String key, value;
      //Getters and setters
    }
}

我发现了问题。简单地说

我还是想相信我错了

我将
.yml
文件更改为
properties
,并尝试使用该文件

@PropertySource(“classpath:/vendor.properties”)
@EnableConfigurationProperties
公共抽象类公共{
@值(“${prop}”)
私人弦道具;
@配置属性(prefix=“app.a”)
@组成部分
公共静态类A扩展了公共{
}
@配置属性(前缀=“app.b”)
@组成部分
公共静态类B扩展了公共{
}
}

它成功了。

如果你把A和B带到顶级水平,它有效吗?@jannis Nope。将这些内部类移动到外部级别没有任何帮助。
@Autowired
CommonConfiguration config;