我想在.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:如果可能的话,我想这样做没有任何自定义代码。
您可以使用这样的注释来实现这一点
@Value("#{T(java.util.Arrays).asList('${my.list.of.strings:a,b,c}')}")
private List<String> mylist;
这里my.list.of.strings将从属性文件中选择,如果它不在那里,那么将使用默认的a,b,c
在属性文件中,你可以有这样的东西
my.list.of.strings = d, e, f
注意值中的空格。我可能错了,但我认为逗号分隔列表中的空格没有使用@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".
我更喜欢的方式(特别是字符串)是以下一个:
admin.user={'Doe, John','Headroom, Max','Mouse, Micky'}
和使用
@Value("#{${admin.user}}")
private List<String> userList;
通过这种方式,还可以在参数中包含逗号。它也适用于集合。
如果使用属性占位符,则ser1702544示例将变成
@Value("#{myConfigProperties['myproperty'].trim().replaceAll(\"\\s*(?=,)|(?<=,)\\s*\", \"\").split(',')}")
使用占位符xml:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="properties" ref="myConfigProperties" />
<property name="placeholderPrefix"><value>$myConfigProperties{</value></property>
</bean>
<bean id="myConfigProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<value>classpath:myprops.properties</value>
</list>
</property>
</bean>
您可以使用这样的注释来实现这一点
@Value("#{T(java.util.Arrays).asList('${my.list.of.strings:a,b,c}')}")
private List<String> mylist;
这里my.list.of.strings将从属性文件中选择,如果它不在那里,那么将使用默认的a,b,c
在属性文件中,你可以有这样的东西
my.list.of.strings = d, e, f