दिलचस्प पोस्ट
क्यों अजाक्स स्क्रिप्ट आईआईएस 7.5 विन 2008 R2 सर्वर पर नहीं चल रही है? क्रोम एक्सटेंशन यूट्यूब पर ब्राउजर नेविगेशन पर लोड नहीं हो रहा है ग्रुप द्वारा प्रत्येक समूह एन परिणाम प्राप्त करने के लिए LIMIT का उपयोग करना? क्या किसी गतिविधि में वर्तमान में सभी सक्रिय टुकड़ों के संदर्भ प्राप्त करने का कोई तरीका है? मेजबान से डॉकर कंटेनर का आईपी पता कैसे प्राप्त करें? त्रुटि सलाखों के साथ स्कैटर साजिश वीबीए फ़ंक्शन कॉल में कोष्ठक के उपयोग को नियंत्रित करने वाले नियम क्या हैं? Memcached vs APC जो मुझे चुनना चाहिए? मैं हार्डवेयर प्रीफेचिंग को प्रोग्रामैटिक रूप से अक्षम कैसे कर सकता हूं? फ़ाइलों को अनझिप करना कैसे एक भाषा (अजगर) में कोई मान मौजूद है या नहीं हेक्स स्ट्रिंग कन्वर्ट (चार int करने के लिए) वसंत में @Component, @Repository और @Service Annotations के बीच क्या अंतर है? कैसे asp.net में लगातार कुकीज़ बनाने के लिए? कोणीय 2: पहली सेवा की सफलता पर दो बैकएंड सेवा कॉल

.war फाइल से टॉमकेट वेबपैग कॉन्फ़िग को एक्सट्रॉउटिंग

टॉमकेट में एक वेबएफ़ को कॉन्फ़िगर करने में मुझे परेशानी हो रही है। मेरी युद्ध फाइल में, मेरे एप / वेब-आईएनएफ / क्लासेस / मेरी प्रोपॉर्प्स फ़ाइल की एक प्रॉपर्टी है, और इसमें पर्यावरण-विशिष्ट उचित है मैं सर्वर पर उस विन्यास फाइल को ओवरराइड करने की कोशिश कर रहा हूं, ताकि एक ही युद्ध फ़ाइल कई वातावरणों में तैनात करेगी।

मैंने सुना है कि टॉमकैट / कॉन्फ / कैटालिना / मायप में प्रतिस्थापन कॉन्फ़िग फ़ाइलों का उपयोग करने के लिए ऐसा करने का एक तरीका था। यह विधि मुझे समझने में परेशानी हो रही है।

इसके अलावा, myApp.war एक ही बिलाव सर्वर पर चलने वाले कई में से एक है, और यह स्थानीय होस्ट के रूप में नहीं चला है। मैं कई समस्याओं को हल करने में सक्षम होना चाहता हूँ।

Server version: Apache Tomcat/7.0.23 Server built: Nov 20 2011 07:36:25 Server number: 7.0.23.0 OS Name: Linux 

वेब के समाधान से एकत्रित समाधान ".war फाइल से टॉमकेट वेबपैग कॉन्फ़िग को एक्सट्रॉउटिंग"

आपका tomcat/conf/Catalina/<host> में संदर्भ डिसिप्टर हो सकते हैं जो आपको "एंटरमेंट प्रविष्टियां" को परिभाषित करने सहित कई चीजें कॉन्फ़िगर कर सकती हैं, जो जावा से जेएनडीआई के जरिए पहुंच योग्य हैं। इसका उपयोग करने के बारे में जाने के बहुत सारे तरीके हैं निजी तौर पर, मैं एक पर्यावरण प्रविष्टि सेट करता हूं जो कि मेरी प्रॉपर्टी फाइल के लिए फाइल सिस्टम पथ है I मेरा ऐप इस प्रविष्टि की जांच करने के लिए बनाया गया है, और यदि यह मौजूद नहीं है, तो फ़ाइल को इसके बजाय कक्षापथ पर देखें। इस तरह, देव में, हमारे पास कक्षा गुणों पर सही गुण हैं, लेकिन जब हम बनाते हैं और तैनात करते हैं, तो हम इसे बाहरी फाइल में बताते हैं

टॉमकेट वेबसाइट पर किसी संदर्भ को कॉन्फ़िगर करने के लिए अच्छे दस्तावेज़ हैं कैसे फ़ाइल बनाने के लिए और इसे कहां रखे जाने के विवरण के बारे में "एक संदर्भ परिभाषित करना" अनुभाग देखें।

एक उदाहरण के रूप में, यदि आपके होस्ट का नाम "myHost" है और आपका ऐप वेबपैक्स निर्देशिका में "myApp.war" नामक एक युद्ध फ़ाइल है, तो आप इस सामग्री के साथ tomcat/conf/Catalina/myHost/myApp.xml बना सकते हैं:

 <Context> <Environment name="configurationPath" value="/home/tomcat/myApp.properties" type="java.lang.String"/> </Context> 

फिर अपने कोड से, आप java:comp/env/configurationPath पाथ पर एक JNDI लुकअप करेंगे (9 5% निश्चितता) कि स्ट्रिंग मान प्राप्त करने के लिए।

मुझे पसंद है .properties फ़ाइलों के बजाय

  • जेएनडीआई – प्रारंभिक समय के बजाय प्रोग्राम कॉन्फ़िगरेशन के दौरान जटिल ऑब्जेक्ट क्यों बनाते हैं ?
  • सिस्टम गुण – आप एकल टॉमकेट में एक ही युद्ध के कई उदाहरणों को अलग से कॉन्फ़िगर नहीं कर सकते
  • संदर्भ पैरामीटर – वे केवल javax.servlet.Filter , javax.servlet.ServletContextListener में पहुंच सकते हैं जो मेरी असुविधाजनक है

टॉमकेट 7 कन्टेक्स्ट होल्ड लोडर एलिमेंट डॉक्स परिनियोजन डिस्क्रिप्टर के अनुसार ( <Context> टैग में क्या है) इन्हें रखा जा सकता है:

  • $CATALINA_BASE/conf/server.xml$CATALINA_BASE/conf/server.xml सर्वर को पुनरारंभ करने के लिए पुनरारंभ करें की आवश्यकता है
  • $CATALINA_BASE/conf/context.xml – खराब – सभी एप्लिकेशन में साझा किया गया
  • $CATALINA_BASE/work/$APP.war:/META-INF/context.xml – बुरा – कॉन्फ़िगर बदलने के लिए $CATALINA_BASE/work/$APP.war:/META-INF/context.xml आवश्यक है
  • $CATALINA_BASE/work/[enginename]/[hostname]/$APP/META-INF/context.xmlअच्छा , लेकिन अंतिम विकल्प देखें !!
  • $CATALINA_BASE/webapps/$APP/META-INF/context.xmlअच्छा , लेकिन आखिरी विकल्प देखें !!
  • $CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xmlसर्वश्रेष्ठ – पूरी तरह से आवेदन से बाहर और स्वचालित रूप से बदलाव के लिए स्कैन !!!

Context कस्टम Loader org.apache.catalina.loader.VirtualWebappLoader (आधुनिक टॉमकेट 7 में उपलब्ध है, आप अपने FilterConfig.getServletContext().getInitParameter(name) अपनी अलग FilterConfig.getServletContext().getInitParameter(name) जोड़ सकते हैं), और Parameter ( FilterConfig.getServletContext().getInitParameter(name) माध्यम से पहुँचा जा सकता है FilterConfig.getServletContext().getInitParameter(name) ) और Environment ( new InitialContext().lookup("java:comp/env").lookup("name") माध्यम से पहुंचा new InitialContext().lookup("java:comp/env").lookup("name") ):

 <Context docBase="${basedir}/src/main/webapp" reloadable="true"> <!-- http://tomcat.apache.org/tomcat-7.0-doc/config/context.html --> <Resources className="org.apache.naming.resources.VirtualDirContext" extraResourcePaths="/WEB-INF/classes=${basedir}/target/classes,/WEB-INF/lib=${basedir}/target/${project.build.finalName}/WEB-INF/lib"/> <Loader className="org.apache.catalina.loader.VirtualWebappLoader" virtualClasspath="${basedir}/target/classes;${basedir}/target/${project.build.finalName}/WEB-INF/lib"/> <JarScanner scanAllDirectories="true"/> <Parameter name="min" value="dev"/> <Environment name="app.devel.ldap" value="USER" type="java.lang.String" override="true"/> <Environment name="app.devel.permitAll" value="true" type="java.lang.String" override="true"/> </Context> 

यदि आप स्प्रिंग का उपयोग करते हैं और यह XML कॉन्फ़िग है:

 <context:property-placeholder location="classpath:app.properties"/> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@${db.host}:${db.port}:${db.user}"/> <property name="username" value="${db.user}"/> <property name="password" value="${db.pass}"/> </bean> 

स्प्रिंग से बीन के खेतों में उपरोक्त गुणों को इंजेक्शन करना आसान है:

 @Value("${db.user}") String defaultSchema; 

JNDI के बजाय:

 @Inject ApplicationContext context; Enviroment env = context.getEnvironment(); String defaultSchema = env.getProperty("db.user"); 

यह भी ध्यान रखें कि EL इस (डिफ़ॉल्ट मान और गहरी पुनरावर्ती प्रतिस्थापन) की अनुमति देते हैं:

 @Value('${db.user:testdb}') private String dbUserName; <property name='username' value='${db.user.${env}}'/> 

यह भी देखें:

  • टॉमकेट क्लासपाथ को एक निर्देशिका जोड़ना
  • क्या मैं टॉमकैट में प्रति एप्लिकेशन आधार पर एक कस्टम कक्षापाथ बना सकता हूँ?
  • टॉमकैट में मेरे वेबपेज प्रसंग के बाहर गुण फ़ाइल कैसे पढ़ा जाए
  • डीबी कनेक्शन जानकारी लोड करने के लिए प्रॉपर्टी फाइलों का उपयोग करने के लिए टोमकैट कॉन्फ़िगर करें
  • क्या आप server.xml या context.xml में डेटाबेस कनेक्शन गुण सेट अप करें
  • टॉमकेट कॉन्फ़िगरेशन को अनन्य करें

नोट सीधा पथ को लाइव डायरेक्ट्री तक बढ़ाने के साथ ही आप लॉगिंग, ऑथ , एटीसी जैसे किसी भी अन्य कॉन्फ़िग्स को एक्सपोर्ट कर सकते हैं। मैं इस तरह से logback.xml logback.xml

<Resources> और <Loader> तत्वों के लिए टमाटर 8 परिवर्तन सिंटैक्स अद्यतन करें , इसी भाग को अब दिखें:

 <Resources> <PostResources className="org.apache.catalina.webresources.DirResourceSet" webAppMount="/WEB-INF/classes" base="${basedir}/target/classes" /> <PostResources className="org.apache.catalina.webresources.DirResourceSet" webAppMount="/WEB-INF/lib" base="${basedir}/target/${project.build.finalName}/WEB-INF/lib" /> </Resources> 

आप अपने कॉन्फ़िगरेशन (गुण फ़ाइल) को अपाचे टोमक \ lib में JAR फ़ाइल में रखने की कोशिश कर सकते हैं और उसे वेब अनुप्रयोग से हटा सकते हैं। जब टोमकैट का वर्ग लोडर आपकी कॉन्फ़िग को वेबएफ़ में नहीं खोजता है, तो वह "लिब" डायरेक्टरी में ढूँढ़ने की कोशिश करेगा। तो आप अपने कॉन्फिगरेशन को बाहरी रूप से बदल सकते हैं ताकि वैश्विक लिब डाइर (इसे अन्य वेबएप्स के बीच साझा किया गया है) के लिए कॉन्फिग को स्थानांतरित किया जा सके।

मैंने टोकेक के बिन फ़ोल्डर में सिर्फ एक setenv.bat या setenv.sh स्क्रिप्ट को जोड़ा है। क्लासपाथ वैरिएबल सेट करें जैसे set CLASSPATH = my-propery-folder

जोहान