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

qeeaahzv  于 2023-03-08  发布在  Spring
关注(0)|答案(4)|浏览(181)

在Sping Boot 应用程序中,我希望能够在application.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

也就是说,我希望每个人的属性都被分组在一个键下。我可以添加任意多的键(人)。
我不需要直接引用这些属性,但我想声明一个Domain对象,如下所示(缩写):

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

  // boilerplate
}

然后通过Configuration接收一个List<Person>。自动化程度越高越好,但如果需要的话,我会非常乐意实现构建器或一些额外的转换器逻辑。
我找不到任何关于这类事情的文档,但是我在log4j中看到过,例如,在那里你可以为任何包名动态添加日志属性,所以至少可以检索这些键。
我知道我可以用不同的方法来实现这一点,例如使用data.sql导入脚本,但是在我的例子中,最理想的是使用单个属性文件(或yaml)格式。

1sbrub3j

1sbrub3j1#

为什么不使用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

这将在List<Person> persons;中解决

uemypmqf

uemypmqf2#

为什么不使用@ConfigurationProperties,它在这种情况下会对您有所帮助,对吗?
详情请参阅
https://www.techiedelight.com/map-spring-boot-properties-to-pojo
https://www.baeldung.com/configuration-properties-in-spring-boot

niwlg2el

niwlg2el3#

是否可以使用www.example.com格式进行此定义application.properties?

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

pgky5nke4#

使用www.example.com格式的定义application.properties
个人=[{id=约翰,姓名=约翰史密斯,主目录=/用户/约翰史密斯},{id=亚当,姓名=亚当贝尔,主目录=/用户/亚当贝尔}]

相关问题