2010-07-01 10 views
24

गुण फ़ाइल स्थान WEB-INF/classes/auth.properties है।वेब एप्लिकेशन में गुण फ़ाइल कैसे पढ़ा जाए?

मैं जेएसएफ-विशिष्ट तरीकों (बाहरी कॉन्टेक्स्ट के साथ) का उपयोग नहीं कर सकता क्योंकि मुझे सेवा मॉड्यूल में गुण फ़ाइल की आवश्यकता है, जिस पर वेब-मॉड्यूल पर निर्भरता नहीं है।

मैं पहले से ही

MyService.class.getClassLoader().getResourceAsStream("/WEB-INF/classes/auth.properties"); 

की कोशिश की है, लेकिन यह null देता है।

मैंने इसे FileInputStream के साथ पढ़ने की भी कोशिश की है, लेकिन इसे पूर्ण पथ की आवश्यकता है जो अस्वीकार्य है।

कोई भी विचार?

उत्तर

49

कई नोट:

  1. आप ClassLoader रूप Thread#getContextClassLoader() द्वारा लौटाए को प्राथमिकता देनी चाहिए।

    ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
    

    यह parentmost classloader जो सभी संसाधनों की पहुंच है देता है। Class#getClassLoader() केवल कक्षा के (बच्चे) क्लासलोडर को प्रश्न में वापस कर देगा जो प्रति वांछित संसाधन तक पहुंच नहीं हो सकता है। यह हमेशा एक क्लासलोडर के साथ वातावरण में काम करेगा, लेकिन हमेशा वेबपैस जैसे क्लासलोडर के जटिल पदानुक्रम वाले वातावरण में नहीं।

  2. /WEB-INF फ़ोल्डर क्लासपाथ की जड़ में नहीं है। /WEB-INF/classes फ़ोल्डर है। तो आपको उससे संबंधित गुण फ़ाइलों को लोड करने की आवश्यकता है।

    classLoader.getResourceAsStream("/auth.properties"); 
    

    आप Thread#getContextClassLoader() उपयोग करने के लिए चुनते हैं, अग्रणी / को हटा दें।

JSF विशेष ExternalContext#getResourceAsStream() जो का उपयोग करता है ServletContext#getResourceAsStream() "फन के अंतर्गत" केवल (वहाँ जहां /WEB-INF फ़ोल्डर बैठा है) webcontent से संसाधनों देता है, classpath से नहीं। लोड करने के लिए संसाधन खोजने के लिए getResourceAsStream classpath पर लग रहा है के साथ

MyService.class.getClassLoader().getResourceAsStream("/auth.properties"); 

पढ़ना फ़ाइलें:

+0

इस मामले में नहीं – unbeli

+0

@unbeli: आपका क्या मतलब है? – Roman

+1

@unbeli: जब आप इसे JAR के रूप में वितरित करते हैं तो शुभकामनाएं :) – BalusC

8

इस प्रयास करें। चूंकि classes निर्देशिका आपके वेबपैप के लिए क्लासपाथ में है, इसलिए फ़ाइल का संदर्भ /auth.properties पर काम करना चाहिए।

5

संसाधन बंडल (http://download.oracle.com/javase/6/docs/api/java/util/ResourceBundle.html) गुण फ़ाइलों के लिए एक सापेक्ष/absotule पथ के साथ अधिकांश समस्याओं का समाधान।

यह संसाधन वर्ग का उपयोग करता है और गुण फ़ाइल को संदर्भित करने के लिए इसे डमी क्लास पर इंगित करता है।

उदाहरण के लिए:

  1. आप एक फ़ाइल MAINProperties.properties कहा जाता है और इसके अंदर वहाँ एक संपत्ति है: mail.host = foo.example।कॉम
  2. बिना किसी चीज़ के MAINProperties नामक एक डमी क्लास बनाएं।
  3. निम्नलिखित कोड का उपयोग करें:।

    ResourceBundle.getBundle ("com.example.com.MAINProperties") getProperty ("mail.host")

और बस इतना ही। कोई इनपुटस्ट्रीम आवश्यक नहीं है।

पी.डी. अपाचे कॉमन्स में एक लाइब्रेरी है जिसे अपाचे कॉमन्स कॉन्फ़िगरेशन कहा जाता है जिसमें बहुत सी क्षमताएं (पुनः लोड करने योग्य फ़ाइलें, एकाधिक डोमेन प्रकार) हैं जिनका उपयोग ऊपर के संयोजन में किया जा सकता है।

संबंधित मुद्दे