2011-06-02 1061 views
54

我加載特性從.properties文件使用Spring如下屬性:春天的.properties文件:獲取元素數組

file: elements.properties 
base.module.elementToSearch=1 
base.module.elementToSearch=2 
base.module.elementToSearch=3 
base.module.elementToSearch=4 
base.module.elementToSearch=5 
base.module.elementToSearch=6 

Spring的XML文件

file: myapplication.xml 
<bean id="some" 
     class="com.some.Class"> 
     <property name="property" value="#{base.module.elementToSearch}" /> 
</bean> 

我的班。 java

file: Class.java 
public void setProperty(final List<Integer> elements){ 
    this.elements = elements; 
} 

但是在調試時,參數元素只會將最後一個元素放入列表中,s o有一個值爲「6」的元素列表,而不是一個包含6個元素的列表。

我嘗試了其他方法,例如僅添加值#{base.module},但它在屬性文件中找不到參數。

一種解決方法是在文件elements.properties用逗號分隔的列表,如:

base.module.elementToSearch=1,2,3,4,5,6 

,並把它作爲一個字符串和解析它,但有一個更好的解決辦法?

+0

可能重複[我如何指定的值在屬性文件中,使他們能夠使用的ResourceBundle#getStringArray檢索?( http://stackoverflow.com/questions/226050/how-do-i-specify-values-in-a-properties-file-so-they-can-be-retrieved-using-resou) – 2011-06-02 09:53:26

+0

所以我需要通過它作爲逗號分隔字符串並在方法中解析。 – RamonBoza 2011-06-02 10:00:36

+0

確切地說,雖然有一些庫已經在爲你做(apache commons) - http://commons.apache.org/configuration/howto_properties.html – 2011-06-02 10:01:51

回答

108

如果您在屬性定義數組文件,如:

base.module.elementToSearch=1,2,3,4,5,6 

您可以在Java類加載這種陣列是這樣的:

@Value("${base.module.elementToSearch}") 
    private String[] elementToSearch; 
+3

我的元素包含逗號。我如何逃離分隔符? '\',甚至'\\'都不起作用。 – banterCZ 2012-03-20 10:28:56

+0

您可以嘗試將它們作爲整數列表,然後將它們轉換爲 @Value(「$ {base.module。elementToSearch}「) 私人列表 elementToSearch; – 2012-03-21 16:17:15

+0

+1,正是我所需要的。不幸的是,以同樣的方式將逗號分隔值讀入列表似乎不起作用(列表將只有一個元素) – Jonik 2013-05-29 08:36:34

13

這裏是你如何能做到這一點的例子在Spring 4.0+

application.properties內容:

some.key=yes,no,cancel 

Java代碼:

@Autowire 
private Environment env; 

... 

String[] springRocks = env.getProperty("some.key", String[].class); 
14

而且櫃面你比分隔符逗號之外的不同,您可以使用爲好。

@Value("#{'${my.config.values}'.split(',')}") 
private String[] myValues; // could also be a List<String> 

在您的應用程序屬性

你可以有

my.config.values=value1, value2, value3