2011-06-02 22 views
54

मैं गुण लोड हो रहा हूँ वसंत का उपयोग कर के रूप में निम्नानुसार एक .properties फ़ाइल से गुण के रूप में तत्व मिल:स्प्रिंग .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 

वसंत xml फ़ाइल

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

और मेरी क्लास। जावा

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

लेकिन डिबगिंग करते समय, पैरामीटर तत्व केवल सूची में अंतिम तत्व प्राप्त करते हैं, एस ओ, 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) –

+0

इसलिए मुझे पास करने की आवश्यकता है यह एक अल्पविराम से अलग स्ट्रिंग और विधि में पार्स के रूप में। – RamonBoza

+0

बिल्कुल, हालांकि कुछ libs पहले से ही आपके लिए कर रहे हैं (apache commons) - http://commons.apache.org/configuration/howto_properties.html –

उत्तर

108

आप गुण में अपने सरणी निर्धारित करते हैं जैसे फाइल:

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

आप इस तरह अपने जावा वर्ग में ऐसी सरणी लोड कर सकते हैं:

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

मेरे तत्वों में अल्पविराम शामिल है। मैं विभाजक से कैसे बचूं? '\,' यहां तक ​​कि \\, 'काम नहीं करते हैं। – banterCZ

+0

आप उन्हें पूर्णांक की सूची के रूप में प्राप्त करने का प्रयास कर सकते हैं और फिर उन्हें @Value ("$ {base.module परिवर्तित कर सकते हैं।elementToSearch} ") निजी सूची elementToSearch; –

+0

+1, बस मुझे जो चाहिए था। दुर्भाग्य से एक ही फैशन में 'सूची ' में अल्पविराम से अलग मूल्यों को पढ़ना प्रतीत नहीं होता है (सूची में केवल एक तत्व होगा) – Jonik

13

यहाँ कैसे आप यह कर सकते का एक उदाहरण है स्प्रिंग 4.0+ में

application.properties सामग्री:

some.key=yes,no,cancel 

जावा कोड:

@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 
की