2012-09-05 19 views
11

से गुणों को पढ़ना आपके आवेदन के लिए कॉन्फ़िगरेशन फ़ाइल पढ़ने के लिए सबसे अच्छा अभ्यास क्या है। टॉमकैट सर्वर में कौन से फ़ोल्डर्स "क्लासपाथ पर" हैं।टॉमकैट

मैंने अपनी कॉन्फ़िगरेशन फ़ाइल को TOMCAT_HOME\conf में रखने का प्रयास किया लेकिन फिर भी मैं इसे अपने सर्वलेट से नहीं पढ़ सकता।

this.getClass().getClassLoader().getResourceAsStream("/app.properties"); 

मैं बहुत गुण शायद 10-15 की जरूरत नहीं है मैं समझ इस समस्या नहीं होगी:

इस का उपयोग कर की कोशिश की (वहाँ conf में app.properties फ़ाइल है)। मुझे याद है जब मैं jboss का उपयोग कर रहा था यह इतना मुद्दा नहीं था।

मेरे ऐप में मैं context.xml में डीबी कनेक्शन वसंत भी निर्दिष्ट करता हूं, क्या मैं वहां भी अपनी संपत्तियों को निर्दिष्ट कर सकता हूं? या यह टोमकैट के साथ कैसे काम करता है?

मैं अपने गुणों को अपने युद्ध/अनपॅक युद्ध से अलग रखना चाहता हूं।

अद्यतन इस पूछने के लिए

कारण है क्योंकि मैं जहाँ मेरे एप्लिकेशन (क्या स्थान पर)

उत्तर

18

कई अलग अलग तरीके हैं, लेकिन यह अपनी आवश्यकताओं पर निर्भर करता है:

आप वर्ग लोडर के बाद से (this.getClass().getClassLoader().getResourceAsStream(...) में के रूप में यह एक java.io.File वस्तु का उपयोग कर का उपयोग करने की आवश्यकता होगी $TOMCAT_HOME/conf निर्देशिका से एक संपत्ति फ़ाइल को लोड करने के लिए बस करने में सक्षम है बिलाव के config निर्देशिका से एक फ़ाइल लोड करने के लिए किया जाएगा (WEB-INF/classes, WEB-INF/lib या $TOMCAT_HOME/lib से कम) अपनी कक्षा पथ से फ़ाइलें (और वर्ग) लोड

सबसे आसान उदाहरण:।

File configDir = new File(System.getProperty("catalina.base"), "conf"); 
File configFile = new File(configDir, "myconfig.properties"); 
InputStream stream = new FileInputStream(configFile); 
Properties props = new Properties(); 
props.load(stream); 

ध्यान दें कि यह दृष्टिकोण आपके कोड को टॉमकैट पर निर्भर करेगा (लोडिंग तंत्र टॉमकैट की सिस्टम प्रॉपर्टी उपलब्ध होने के तथ्य पर निर्भर करता है)। यह ऐसा कुछ है जिसे मैं सभी पर अनुशंसा नहीं करता हूं, इसलिए यदि आप अपनी संपत्ति फ़ाइल को अपने क्लासपाथ के अंदर किसी फ़ोल्डर में ले जाएं तो आपको इसे जिस तरह से प्रयास किया जा सकता है उसे लोड करने में सक्षम होना चाहिए और आपका एप्लिकेशन किसी भी कंटेनर में तैनात किया जा सकता है।

और, आप अपनी संपत्तियों को जेएनडीआई संसाधनों के रूप में कॉन्फ़िगर कर सकते हैं लेकिन उन्हें एक्सेस करने में बहुत परेशानी होगी।

+0

यह वह स्थान नहीं है जहां एप्लिकेशन गुण होना चाहिए। –

+3

मुझे पता है, लेकिन अगर वह उन्हें रखना चाहता है तो उसके ऊपर है, मैं उसे प्राप्त करने के लिए सुराग दे रहा हूं और इसे एक वर्गपथ उपलब्ध फ़ोल्डर –

+0

पर ले जाने की सिफारिश दे रहा हूं। –

0

तैनात किया जाएगा जहां तक ​​मैं जानता हूँ कि आप भी बिल्ला में datasource कॉन्फ़िगर कर सकते हैं पता नहीं है है। DataSource in Tomcat

इसके बाद आप अपने आवेदन में datasource का उपयोग कर सकते हैं।

+0

धन्यवाद। मुझे डेटा स्रोत की आवश्यकता नहीं है, मेरे पास पहले से कॉन्फ़िगर किया गया है, मुझे अतिरिक्त गुणों की आवश्यकता है –

+0

तो मुझे लगता है कि आप जो कुछ भी कर रहे हैं वह ठीक है। कोई फर्क नहीं पड़ता कि एक्स्ट्राक्टेड फाइलों की टोमकैट निर्देशिका संरचना में एप्लिकेशन को तैनात किया गया है, इसलिए यदि app.properties को तैनाती के साथ सही ढंग से भेज दिया गया है तो इससे कोई समस्या नहीं आएगी। –

1

अपनी फ़ाइलों को अपने वेबैप के WEB-INF/classes पर रखें। यह डिफ़ॉल्ट क्लासपाथ निर्देशिका है। conf यदि केवल टॉमकैट आंतरिक के लिए।

0

हालांकि यह एक पिटा हो सकता है, यह शायद एक विशेषता भी है जिसे आप नहीं जानते कि यह कहां तैनात किया जाएगा। तब आप उस तथ्य को "जोड़े" नहीं कर सकते!

आपके बाकी जावा स्टैक के आधार पर, सबसे अच्छा तरीका आमतौर पर टॉमकैट से स्वतंत्र होता है।आप वसंत का उपयोग कर रहे हैं, तो आप उदाहरण के लिए कह सकते हैं:

new ClassPathResource("**/myFile.properties") 

या यदि जावा कॉन्फ़िग, एक और उदाहरण का उपयोग करते हुए:

@PropertySource("classpath:META-INF/MyWeb.properties") 

सादे जावा में आप कह सकते हैं:

InputStream stream = loader.getResourceAsStream(resourceName); 

जहां लोडर क्लासलोडर

1

का एक उदाहरण है जो किसी विशेष कॉन्फ़िगरेशन फ़ाइल के स्थान का जिक्र करने के बजाय, मैं आपको से जेएनडीआई-बाध्य विन्यास, अनुप्रयोगों को केवल कॉन्फ़िगरेशन डेटा और जावा ईई मानकों पर निर्भर रखने के लिए। मैं दो विकल्प देख सकते हैं:

  1. आप केवल अपनी संपत्ति फ़ाइल में विन्यास प्रविष्टियों में से एक उदारवादी नंबर है, तो फिर उन्हें Environment Entries बनाने पर विचार करें अपने एप्लिकेशन में JNDI के माध्यम से उन तक पहुंचें।

  2. वैकल्पिक रूप से, यदि आप अपनी संपत्तियों को एक अलग संपत्ति फ़ाइल में रखना चाहते हैं, तो कहें कि आप गुणों का प्रतिनिधित्व करने के लिए एक बीन भी बना सकते हैं, एक कारखाना (एक संपत्ति फ़ाइल का उपयोग कर बीन शुरू करना) और इसे जेएनडीआई तक Resource Definition के रूप में।
    इसके साथ, कोई भी ऐप्स को पुनरारंभ करने की आवश्यकता के बिना नियमित रूप से संपत्ति फ़ाइल को फिर से पढ़ सकता है, कॉन्फ़िगरेशन के विभिन्न स्रोतों या इसी तरह की अन्य आवश्यकताओं के बीच स्विच कर सकता है।

वेब अनुप्रयोगों इस विन्यास का उपयोग कर से प्रत्येक में यह विन्यास सेम (या यदि विकल्प 1 प्रयोग किया जाता है प्रत्येक env। प्रवेश के लिए एक संदर्भ) का उल्लेख करने के web.xml है एक Resource Reference शामिल करना होगा।

0

अपाचे-बिल्ला-7.0.78 \ conf फ़ोल्डर में .properties फ़ाइल जोड़ें: प्रतिक्रिया के लिए

File configDir = new File(System.getProperty("catalina.base"), "conf"); 
File configFile = new File(configDir, "dashboardiframes.properties"); 
InputStream stream = new FileInputStream(configFile);Properties properties = new Properties(); 
properties.load(stream);