Java 在Spring application.properties文件中声明对象列表

Java 在Spring application.properties文件中声明对象列表,java,spring,spring-boot,properties,Java,Spring,Spring Boot,Properties,在Spring Boot应用程序中,我希望能够在应用程序.properties文件中声明域对象的列表,并将它们作为列表作为Bean读取 例如,假设我在application.properties中有以下内容: com.application.person.john.name=John Smith com.application.person.john.home-directory=/Users/john.smith com.application.person.john.private-key-

在Spring Boot应用程序中,我希望能够在
应用程序.properties
文件中声明域对象的列表,并将它们作为
列表
作为
Bean
读取

例如,假设我在
application.properties
中有以下内容:

com.application.person.john.name=John Smith
com.application.person.john.home-directory=/Users/john.smith
com.application.person.john.private-key-file=/Users/john.smith/.ssh/id_rsa

com.application.person.adam.name=Adam Bell
com.application.person.adam.home-directory=/Users/adam.bell
com.application.person.adam.private-key-file=/Users/adam.bell/.ssh/id_rsa

etc
例如,我希望每个人的属性都分组在一个键下。我可以添加任意多的键(人)

我不需要直接引用这些属性,但我想声明一个域对象,如下所示(缩写):

然后通过
配置
接收
列表
。自动化程度越高越好,但如果需要的话,我会非常乐意实现构建器或一些额外的转换器逻辑

我找不到这类东西的任何文档,但我在log4j中看到过,例如,您可以为任何包名动态添加日志属性,因此至少可以检索这些键


我知道我可以用不同的方式来实现,例如使用
data.sql
导入脚本,但是在我的例子中,最好是使用单个属性文件(或yaml)格式。

为什么不使用id作为显式属性

例如(yaml):


这将在
列表中解决

为什么不使用
@ConfigurationProperties
在这种情况下它会帮助你,对吗

详情请参阅


那太理想了。如何使用@ConfigurationProperties将其解析为
列表
。见:
class Person {
  String id;   (this would be the 'key', i.e. 'john', 'adam')
  String name;
  Path homeDirectory;
  Path privateKeyFile;

  // boilerplate
}
com:
  application:
    persons:
      - 
        id: john
        name: John Smith
        home-directory: /Users/john.smith
      - 
        id: adam 
        name: Adam Bell
        home-directory: /Users/adam.bell