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

Arj*_*Arj 6 java spring properties spring-boot

在 Spring Boot 应用程序中,我希望能够在文件中声明域对象列表,并将它们作为aapplication.properties读取。 List<TheDomainObject>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
Run Code Online (Sandbox Code Playgroud)

即我希望将每个人的属性分组在一个键下。我可以添加任意数量的键(人)。

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

class Person {
  String id;   (this would be the 'key', i.e. 'john', 'adam')
  String name;
  Path homeDirectory;
  Path privateKeyFile;

  // boilerplate
}
Run Code Online (Sandbox Code Playgroud)

然后收到一个List<Person>通过Configuration。越自动化越好,但如果需要的话,我非常乐意实现构建器或一些额外的转换器逻辑。

我找不到此类事情的任何文档,但我在log4j中看到过它,例如,您可以在其中动态添加任何包名称的日志记录属性,因此必须至少可以检索这些密钥。

我知道我可以以不同的方式执行此操作,例如通过使用data.sql导入脚本,但就我而言,将其采用单个属性文件(或 yaml)格式是非常理想的。

小智 2

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

例如(yaml):

com:
  application:
    persons:
      - 
        id: john
        name: John Smith
        home-directory: /Users/john.smith
      - 
        id: adam 
        name: Adam Bell
        home-directory: /Users/adam.bell
Run Code Online (Sandbox Code Playgroud)

这将解决List<Person> persons;