我想在.properties文件中有一个值列表,即:

my.list.of.strings=ABC,CDE,EFG

并直接在我的类中加载它,即:

@Value("${my.list.of.strings}")
private List<String> myList;

据我所知,另一种方法是将它放在spring配置文件中,并将其作为bean引用加载(如果我错了请纠正我),即

<bean name="list">
 <list>
  <value>ABC</value>
  <value>CDE</value>
  <value>EFG</value>
 </list>
</bean>

但是有没有办法做到这一点呢?使用.properties文件? ps:如果可能的话,我想这样做没有任何自定义代码。


当前回答

如果您正在使用Spring Boot 2,那么它就可以正常工作,不需要任何额外的配置。

my.list.of.strings=ABC,CDE,EFG

@Value("${my.list.of.strings}")
private List<String> myList;

其他回答

我认为这对于获取数组和剥离空格更简单:

@Value("#{'${my.array}'.replace(' ', '').split(',')}")
private List<String> array;

使用Spring EL:

@Value("#{'${my.list.of.strings}'.split(',')}") 
private List<String> myList;

假设你的属性文件正确加载如下:

my.list.of.strings=ABC,CDE,EFG

如果您正在使用Spring Boot 2,那么它就可以正常工作,不需要任何额外的配置。

my.list.of.strings=ABC,CDE,EFG

@Value("${my.list.of.strings}")
private List<String> myList;

注意值中的空格。我可能错了,但我认为逗号分隔列表中的空格没有使用@Value和Spel截断。列表

foobar=a, b, c

会被读入一个字符串列表吗

"a", " b", " c"

在大多数情况下,您可能不想要空格!

表达式

@Value("#{'${foobar}'.trim().replaceAll(\"\\s*(?=,)|(?<=,)\\s*\", \"\").split(',')}")
private List<String> foobarList;

会给你一个字符串列表

"a", "b", "c".

正则表达式删除逗号前面和后面的所有空格。值中的空格不会被删除。所以

foobar = AA, B B, CCC

应该得到的值

"AA", "B B", "CCC".

这个问题的答案

@Value("#{'${my.list.of.strings}'.split(',')}") 
private List<String> myList; 

对逗号分隔的值按预期工作。 为了处理null(当属性未指定时),添加默认值(':'在属性名之后)为空字符串,如下所示:

@Value("#{'${my.list.of.strings: }'.split(',')}")