दिलचस्प पोस्ट
$ डॉलर का चिह्न एक्लिप्स कंसोल दृश्य जो एएनएसआई रंग कोड का सम्मान करता है? PHP कमांड सिंक त्रुटि से बाहर क्या मैं क्लाइंट को कॉल करने से पहले SmtpClient का परीक्षण कर सकता हूँ? सर्कुलर संदर्भ के साथ जावास्क्रिप्ट ऑब्जेक्ट स्ट्रिंग (JSON में कन्वर्ट) Console.dir और console.log के बीच अंतर क्या है? हम Typeahead.js में कैसे रिमोट सेट करते हैं? सी # खाली वक्तव्य फ़्रेम-बाय-फ़्रेम एनीमेशन प्रारंभ करना डेटा योग्य स्तंभों का एक रैखिक संयोजन कुशलतापूर्वक कंप्यूटिंग एजेक्स अनुरोध के साथ प्रगति की प्रगति दिखा रहा है DocumentListener Java, मैं JTextBox में खाली स्ट्रिंग कैसे रोकूं? ब्लॉक स्कोप मूल रूप से जावास्क्रिप्ट में लागू क्यों नहीं किया गया था? कोको फली कैसे स्थापित करें? एंड्रॉइड – गतिविधि नहीं मिला अपवाद

.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 

Solutions Collecting From Web of ".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

जोहान