दिलचस्प पोस्ट
SciPy में लोपास फ़िल्टर बनाना – तरीके और इकाइयों को समझना जांच कैसे करें कि स्थान सेवाएं सक्षम हैं या नहीं? एमडी 5 हैश को "डिक्रिप्ट" करना असंभव कैसे हो सकता है? Visual Studio 2010 द्वारा .NET Framework 4.5 लक्ष्यीकरण फ़्लोट्स और स्ट्रिंग रूपांतरण के साथ अजीब व्यवहार मेरे आवेदन और एक्सेस क्वेरी विज़ार्ड के बीच भिन्न तरह के व्यवहार वेबब्रोवर नियंत्रण सीमाएं क्या इनटस्टस्ट्रीम से टाइमआउट के साथ पढ़ना संभव है? वीडियो देखें प्लेबैक स्थिति या मीडिया कंट्रोलर के लिए इवेंट / रोकें एक DOM में डुप्लिकेट आईडी की जांच करने के लिए JQuery वीडियो फ़ाइल से पूर्वावलोकन छवि जेनरेट करें? सभी मौजूदा फ़ील्ड शामिल करें और दस्तावेज़ में नए फ़ील्ड जोड़ें फॉर्म जमा होने पर बटन सबमिट करें का मूल्य भेजें थ्रेड पैरामीटर के रूप में सूचक और संदर्भ के बीच अंतर आप एक पाठ विजेट के हिस्से को केवल पढ़ने के रूप में कैसे चिह्नित कर सकते हैं?

कैसे स्प्रिंग अनुप्रयोग में सिस्टम पर्यावरण चर को पढ़ने के लिए

एप्लिकेशन संदर्भ में सिस्टम वातावरण चर को कैसे पढ़ें?

मुझे कुछ चाहिए:

<util:properties id="dbProperties" location="classpath:config_DEV/db.properties" /> 

या

 <util:properties id="dbProperties" location="classpath:config_QA/db.properties" /> 

वातावरण के आधार पर

क्या मुझे इस तरह से मेरे आवेदन प्रसंग में कुछ है?

 <util:properties id="dbProperties" location="classpath:config_${systemProperties.env}/db.properties" /> 

जहां वास्तविक वाल्व सिस्टम पर्यावरण चर के आधार पर सेट किया गया है

मैं स्प्रिंग 3.0 का उपयोग कर रहा हूँ

Solutions Collecting From Web of "कैसे स्प्रिंग अनुप्रयोग में सिस्टम पर्यावरण चर को पढ़ने के लिए"

इस आलेख को देखें यह आपको PropertyPlaceholderConfigurer माध्यम से ऐसा करने के कई तरीके देता है जो बाह्य गुणों का समर्थन करता है ( systemPropertiesMode संपत्ति के माध्यम से)

आप करीब हैं: ओ) स्प्रिंग 3.0 स्प्रिंग एक्सप्रेशन भाषा जोड़ती है आप उपयोग कर सकते हैं

 <util:properties id="dbProperties" location="classpath:config_#{systemProperties['env']}/db.properties" /> 

java ... -Denv=QA साथ संयुक्त java ... -Denv=QA आपकी समस्या को हल करना चाहिए।

@ यिलिंग की एक टिप्पणी भी नोट करें:

प्रणाली परिवेश चर का उपयोग करने के लिए, जो ओएस स्तरीय चर है जैसे एमी टिप्पणी करता है, हम उस ईएल में "सिस्टमप्रॉपर्टीज़" के बजाय "सिस्टम पर्यावरण" का उपयोग कर सकते हैं। #{systemEnvironment['ENV_VARIABLE_NAME']}

हां, <property name="defaultLocale" value="#{ systemProperties['user.region']}"/> लिए आप <property name="defaultLocale" value="#{ systemProperties['user.region']}"/>

चर systemProperties पूर्वनिर्धारित है, देखें 6.4.1 XML आधारित कॉन्फ़िगरेशन

आजकल आप रख सकते हैं

 @Autowired private Environment environment; 

अपने @Component , @Bean , आदि में, और फिर Environment वर्ग के माध्यम से संपत्तियों तक पहुंच प्राप्त करें:

 environment.getProperty("myProp"); 

@Bean में एक संपत्ति के लिए

 @Value("${my.another.property:123}") // value after ':' is the default Integer property; 

एक और तरीका यह आसान है @ConfigurationProperties बीन्स:

 @ConfigurationProperties(prefix="my.properties.prefix") public class MyProperties { // value from my.properties.prefix.myProperty will be bound to this variable String myProperty; // and this will even throw a startup exception if the property is not found @javax.validation.constraints.NotNull String myRequiredProperty; //getters } @Component public class MyOtherBean { @Autowired MyProperties myProperties; } 

नोट: बस एक नया वातावरण चर सेट करने के बाद ग्रहण को पुनः आरंभ करने के लिए याद रखें

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

उदाहरण के लिए, यदि आपके पास एक config फाइल है

 /testapp/config/my.app.config.properties 

फिर एक ऐसा वातावरण चर सेट करें जैसे:

 MY_ENV_VAR_PATH=/testapp/config 

और आपका ऐप इस तरह से बीन परिभाषा का उपयोग कर फ़ाइल लोड कर सकता है:

जैसे

 <bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer"> <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> <property name="searchSystemEnvironment" value="true" /> <property name="searchContextAttributes" value="true" /> <property name="contextOverride" value="true" /> <property name="ignoreResourceNotFound" value="true" /> <property name="locations"> <list> <value>file:///${MY_ENV_VAR_PATH}/my.app.config.properties</value> </list> </property> </bean> 

स्प्रिंग ईएल का उपयोग करके आप निम्न उदाहरण लिख सकते हैं

 <bean id="myBean" class="path.to.my.BeanClass"> <!-- can be overridden with -Dtest.target.host=http://whatever.com --> <constructor-arg value="#{systemProperties['test.target.host'] ?: 'http://localhost:18888'}"/> </bean> 

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

इसे आपको इसी तरह करना होगा:

 <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> <property name="searchSystemEnvironment" value="true" /> </bean> <bean id="myBean" class="path.to.my.BeanClass"> <!-- can be overridden with -Dtest.target.host=http://whatever.com --> <constructor-arg value="${test.target.host:http://localhost:18888}"/> </bean> 

संपत्ति के स्थान धारक को निम्नानुसार घोषित करें

 <bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> <property name="locations"> <list> <value>file:///path.to.your.app.config.properties</value> </list> </property> </bean> 

तो कहने के लिए कि आप अपने टॉमकेट सेम या किसी बीन के लिए सिस्टम। प्रॉपर्टी System.property("java.io.tmpdir") पढ़ना चाहते हैं, तो अपनी गुण फाइल में निम्नलिखित जोड़ें:

 tomcat.tmp.dir=${java.io.tmpdir} 

इसे आपको इसी तरह करना होगा:

 <bean id="systemPrereqs" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" scope="prototype"> <property name="targetObject" value="#{@systemProperties}" /> <property name="targetMethod" value="putAll" /> <property name="arguments"> <util:properties> <prop key="deployment.env">dev</prop> </util:properties> </property> </bean> 

लेकिन याद रखना कि स्प्रिंग पहले लोड हो जाता है और फिर यह इस बीन को लोड करेगा MethodInvokingFactoryBean इसलिए यदि आप इसे अपने परीक्षण मामले के लिए उपयोग करने का प्रयास कर रहे हैं तो सुनिश्चित करें कि आप निर्भर-ऑन का उपयोग करते हैं उदाहरण के लिए इस मामले में

यदि आप इसे अपने मुख्य वर्ग के लिए उपयोग कर रहे हैं तो यह गुण अपने pom.xml का प्रयोग करके बेहतर होगा

 <systemProperty> <name>deployment.env</name> <value>dev</value> </systemProperty> 

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

अब पर्यावरण के आधार पर, इनमें से एक प्रॉपर्टी फाइल को स्टार्टअप पर लागू किए जाने वाले श्रोताओं में पढ़ा जा सकता है, जैसे ServletContextListener

संपत्ति फ़ाइल में विभिन्न कुंजी के लिए पर्यावरण विशिष्ट मान शामिल होंगे।

नमूना "स्थानीय.प्रभावनाएं"

 db.logsDataSource.url=jdbc:mysql://localhost:3306/logs db.logsDataSource.username=root db.logsDataSource.password=root db.dataSource.url=jdbc:mysql://localhost:3306/main db.dataSource.username=root db.dataSource.password=root 

नमूना "उत्पादन। प्रॉपर्टीज़"

 db.logsDataSource.url=jdbc:mariadb://111.111.111.111:3306/logs db.logsDataSource.username=admin db.logsDataSource.password=xyzqer db.dataSource.url=jdbc:mysql://111.111.111.111:3306/carsinfo db.dataSource.username=admin db.dataSource.password=safasf@mn 

इन गुणों की फाइल का उपयोग करने के लिए, आप नीचे उल्लेखित रीसॉर्स का इस्तेमाल कर सकते हैं

  PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer(); ResourceLoader resourceLoader = new DefaultResourceLoader(); Resource resource = resourceLoader.getResource("classpath:"+System.getenv("SERVER_TYPE")+"DB.properties"); configurer.setLocation(resource); configurer.postProcessBeanFactory(beanFactory); 

SERVER_TYPE को पर्यावरण और पर्यावरण के लिए उपयुक्त मान के रूप में परिभाषित किया जा सकता है।

इन परिवर्तनों के साथ appplicationContext.xml में निम्न परिवर्तन होंगे

 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="${db.dataSource.url}" /> <property name="username" value="${db.dataSource.username}" /> <property name="password" value="${db.dataSource.password}" /> 

उम्मीद है की यह मदद करेगा ।

हीलिंग के लिए धन्यवाद यह एक संकेत था।

 <bean id="propertyConfigurer" class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer"> <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> <property name="searchSystemEnvironment" value="true" /> <property name="locations"> <list> <value>file:#{systemEnvironment['FILE_PATH']}/first.properties</value> <value>file:#{systemEnvironment['FILE_PATH']}/second.properties</value> <value>file:#{systemEnvironment['FILE_PATH']}/third.properties</value> </list> </property> </bean> 

इसके बाद, आपके पास 'FILE_PATH' नामक एक वातावरण चर होना चाहिए। सुनिश्चित करें कि आप अपने मशीन को उस वातावरण चर बनाने के बाद पुनः आरंभ करते हैं।

सिस्टम वैरिएबल का मान प्राप्त करने के लिए, सिम्पी नीचे कोड का उपयोग करें:

 System.getenv("property-name");