2012-05-24 21 views
7

के अंदर मेवेन सेटिंग्स.एक्सएमएल गुणों का उपयोग करना मेरे पास ~/.m2 निर्देशिका में एक मेवेन settings.xml फ़ाइल है; यह इस तरह दिखता है:वसंत संदर्भ

<settings> 
    <profiles> 
     <profile> 
      <id>mike</id> 
      <properties> 
       <db.driver>org.postgresql.Driver</db.driver> 
       <db.type>postgresql</db.type> 
       <db.host>localhost</db.host> 
       <db.port>5432</db.port> 
       <db.url>jdbc:${db.type}://${db.host}:${db.port}/dbname</db.url> 
      </properties> 
     </profile> 
    </profiles> 
    <activeProfiles> 
     <activeProfile>mike</activeProfile> 
    </activeProfiles> 
    <servers> 
     <server> 
      <id>server_id</id> 
      <username>mike</username> 
      <password>{some_encrypted_password}</password> 
     </server> 
    </servers> 
</settings> 

मैं Maven के integration-test चरण के अंदर दो बार

  • एक बार इन गुणों का उपयोग करने के लिए स्थापित और मेरे डेटाबेस फाड़ करना चाहते हैं। मेवेन फ़िल्टरिंग का उपयोग करना, यह पूरी तरह से काम कर रहा है।
  • मेरा स्प्रिंग एप्लिकेशन चलाते समय दूसरी बार, जिसका अर्थ है कि मुझे इन गुणों को मैवेन के resources:resources चरण के दौरान मेरी servlet-context.xml फ़ाइल में प्रतिस्थापित करने की आवश्यकता है। settings.xml के ऊपरी भाग में गुणों के लिए, जैसे ${db.url}, यह ठीक काम करता है। मैं समझ नहीं सकता कि स्प्रिंग servlet-context.xml फ़ाइल में मेरा डेटाबेस उपयोगकर्ता नाम और (डिक्रिप्ट) पासवर्ड कैसे प्रतिस्थापित करें।

मेरी servlet-context.xml फ़ाइल का उचित हिस्सा लगता है:

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName"><value>${db.driver}</value></property> 
    <property name="url"><value>${db.url}</value></property> 
    <property name="username"><value>${username}</value></property> 
    <property name="password"><value>${password}</value></property> 
</bean> 

अंत यहाँ लक्ष्य है हर डेवलपर (एकीकरण परीक्षण के लिए अपने स्वयं के मशीन पर और डेटाबेस) अपने स्वयं के Maven सेटिंग्स के लिए के लिए। .. और जेनकिंस सर्वर पर एक समान सेटअप। हम एक आम उपयोगकर्ता नाम/पासवर्ड/आदि साझा नहीं करना चाहते हैं।

उत्तर

2

मैवेन वॉर प्लगइन की कॉन्फ़िगरेशन द्वारा वेब संसाधनों को फ़िल्टर करने का एक तरीका है। आधिकारिक प्लगइन के दस्तावेज़ों से स्निपेट के लिए this पर देखें।

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

+0

रीकंपलिंग के बारे में वह बिंदु मान्य है। मुझे निश्चित रूप से और अधिक देखना होगा, क्योंकि यह एक विरोधी पैटर्न है जिसे मैं टालने की उम्मीद कर रहा हूं। एक सीआई/सीडी शैली में चलाने के लिए निश्चित रूप से इसकी आवश्यकता है। लेकिन साथ ही, मैं पहले से मौजूद जानकारी का पुन: उपयोग करने का प्रयास कर रहा हूं और 'सेटिंग्स में संग्रहीत है।xml' – Mike

+0

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

+0

वसंत 3.1 ने इस प्रकार के परिदृश्य के लिए नई सामग्री का एक भार प्रस्तुत किया: http://blog.springsource.org/2011/02/15/spring-3-1-m1-unified-property-management/ – artbristol

1

मैं आपको मध्य में एक संपत्ति फ़ाइल का उपयोग करने की सलाह देता हूं। मेरा मतलब है: स्प्रिंग एप्लिकेशन गुणों को लोड करेगा context:property-placeholder का उपयोग करके संपत्ति फ़ाइल का निर्माण करेगा और मैवेन वह होगा जो फ़िल्टरिंग का उपयोग करके settings.xml से मूल्यों का उपयोग करके $ {...} वैरिएबल को प्रतिस्थापित करेगा।

आपकी संपत्ति फ़ाइल:

db.driver=${db.driver} 
db.url=${db.url} 
username=${username} 
password=${password} 

आपका servlet-context.xml फ़ाइल

<context:property-placeholder location="classpath:your-property-file.properties" /> 

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName"><value>${db.driver}</value></property> 
    <property name="url"><value>${db.url}</value></property> 
    <property name="username"><value>${username}</value></property> 
    <property name="password"><value>${password}</value></property> 
</bean> 

अपने pom.xml

<resources> 
    ... 
    <resource> 
     <directory>src/main/resources</directory> 
     <filtering>true</filtering> 
    </resource> 
    ... 
</resources> 
0

मैं इसे करने की कोशिश नहीं की है, लेकिन इस maven wiki page के अनुसार,का उपयोग कर settings.xml में गुणों को संदर्भित करने में सक्षम होना चाहिएउपसर्ग। तो ${settings.servers.server.username}settings.xml में username को आदर्श रूप से वापस करना चाहिए।

+0

जो भीतर है स्प्रिंग के नहीं, मेवेन का दायरा, ताकि आप स्प्रिंग में रनटाइम पर उन तक नहीं पहुंच सकें। आप केवल फ़िल्टर विकल्प के साथ उनका उपयोग कर सकते हैं। –

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