java - स्प्रिंग एप्लिकेशन कॉन्टेक्स्ट में सिस्टम पर्यावरण चर को कैसे पढ़ा जाए




spring environment-variables (8)

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

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

<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" />

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

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


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

<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' नामक एक पर्यावरण चर होना चाहिए। सुनिश्चित करें कि आप उस पर्यावरण चर बनाने के बाद अपनी मशीन को पुनरारंभ करें।


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

तो उदाहरण के लिए, यदि आपके पास एक कॉन्फ़िगरेशन फ़ाइल है

/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>

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

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

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

@yiling द्वारा भी एक टिप्पणी नोट:

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


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

<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>

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

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

<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>

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

System.getenv("property-name");


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





environment-variables