【问题标题】:How to read all properties into an array with spring?如何使用弹簧将所有属性读入数组?
【发布时间】:2016-06-18 08:22:10
【问题描述】:

我知道您可以使用 spring 读取单个属性,并将具有值列表的单个属性读取到列表中。但是如何将文件中的所有属性读取到列表中呢?

I.E.

编辑:我们正在读取的属性文件实际上只是一个值列表,没有键,如下面的更新示例:

属性文件

queueName1
quename2
queName3

...等(该文件有 100 行长,因此为什么它不是具有一个属性名称的值列表)

然后能够做类似的事情

//Imaginary Code
@Value("${GET ALL THE LINES}")
List<String> eachLineOfPropertyFile;

【问题讨论】:

  • 如何识别键和值?如果您愿意,您可能应该这样做stackoverflow.com/questions/23506471/… 使用 List 而不是 map
  • 原来属性文件实际上只是一个值列表,没有键
  • 我也不希望这些处于环境系统级别。本质上,我们只是迭代了一堆值来部署某些队列,而且它只在这个位置使用。还有比我上面列出的更多的吗?

标签: java spring properties annotations introspection


【解决方案1】:

如果你想单独使用 Spring,那么在属性文件中使用“,”分隔每个值并使用 spring EL。

您的属性文件将如下所示:

property.values=queueName1,quename2,queName3

并带有 Spring 值注释

@Value("#{'${property.values}'.split(',')}") 
List<String> eachLineOfPropertyFile;

【讨论】:

  • 是的,我正在考虑这个,但它是一个大型项目,让团队更改属性文件可能需要 2 个月的努力,我不想花费大声笑。这更像是“如果存在的话会很酷,不是吗?”题。除了单独读取每一行之外,我当前的代码更改是使用 apache FileUtils 执行上面建议的一次读取所有行
【解决方案2】:

下面的不能用吗

List<String> list = Files.readAllLines(new File("propertiesFile").toPath(), Charset.defaultCharset() );

PS:这是 Java 7 的一部分

【讨论】:

  • 这是我目前的建议,目前他们打开一个InputStream,然后创建一个Scanner,然后遍历每一行将其放入列表中。我知道将属性列表放入列表中的能力,但只是想知道我是否可以进一步压缩它
  • Sprint 属性源类提供了名称/值属性对的来源。底层源对象可以是封装属性的任何类型 T。示例包括 Properties 对象、Map 对象、ServletContext 和 ServletConfig 对象(用于访问 init 参数)。
  • 如果您担心只是被压缩而不准备将属性更改为键/值对,那么上面的代码是一个不错的选择。无论如何,这是一个单行更改。
  • 是的,我认为这是目前最好的路线。处理字符串列表的整个类一开始就很奇怪。
猜你喜欢
  • 2016-03-28
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
  • 2011-10-23
  • 2011-12-16
  • 2018-08-31
  • 1970-01-01
相关资源
最近更新 更多