2015-03-19 5 views
6

में गुणों को हल नहीं करता है वर्तमान में मेरे पास एक स्प्रिंग xml कॉन्फ़िगरेशन (स्प्रिंग 4) है जो गुण फ़ाइल लोड करता है।स्प्रिंग प्लेसहोल्डर JavaConfig

context.properties

my.app.service = myService 
my.app.other = ${my.app.service}/sample 

स्प्रिंग एक्सएमएल विन्यास

<bean id="contextProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
    <property name="ignoreResourceNotFound" value="true" /> 
    <property name="fileEncoding" value="UTF-8" /> 
    <property name="locations"> 
     <list> 
      <value>classpath:context.properties</value> 
     </list> 
    </property> 
</bean> 
<bean id="placeholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="ignoreResourceNotFound" value="true" /> 
    <property name="properties" ref="contextProperties" /> 
    <property name="nullValue" value="@null" /> 
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 
</bean> 

बीन जो गुण

@Component 
public class MyComponent { 

    @Value("${my.app.other}") 
    private String others; 

} 

यह पूरी तरह से काम करता है और के रूप में अपवादित others मूल्य, MyService/sample है का उपयोग करें। लेकिन जब मैं JavaConfig द्वारा इस कॉन्फ़िगरेशन को प्रतिस्थापित करने का प्रयास करता हूं, तो मेरे घटक में @Value उसी तरह काम नहीं करता है। मान myService/sample नहीं है लेकिन ${my.app.service}/sample है।

@Configuration 
@PropertySource(name="contextProperties", ignoreResourceNotFound=true, value={"classpath:context.properties"}) 
public class PropertiesConfiguration { 

    @Bean 
    public static PropertyPlaceholderConfigurer placeholder() throws IOException { 
     PropertyPlaceholderConfigurer placeholder = new PropertyPlaceholderConfigurer(); 
     placeholder.setNullValue("@null"); 
     placeholder.setSystemPropertiesMode(PropertyPlaceholderConfigurer.SYSTEM_PROPERTIES_MODE_OVERRIDE); 
     return placeholder; 
    } 

} 

क्या मुझे xml से Javaconfig में रूपांतरण में कुछ याद आया?

ps: मैं बिना किसी सफलता के PropertyPlaceholderConfigurer के बजाय PropertySourcesPlaceholderConfigurer को तुरंत चालू करने का प्रयास करता हूं।

+0

भले ही यह आपकी समस्या का समाधान न करे, मैं पुष्टि कर सकता हूं कि आपको 'PropertySourcesPlaceholderConfigurer' का उपयोग करना चाहिए, न कि 'PropertyPlaceholderConfigurer' – superbob

+0

' my.app.service' प्रॉपर्टी ठीक ठीक करें? '@Value (" $ {my.app.service} ") से जांचें, 'अगर मैं संपत्ति घोंसले से समस्या आती हूं तो मैं भटक जाता हूं। – superbob

उत्तर

2

PropertySourcesPlaceholderConfigurer कॉन्फ़िगर करने के लिए अद्यतन करने के लिए अद्यतन करें। बस @PropertySource एनोटेशन होने के लिए पर्याप्त नहीं होगा:

@Bean 
public static PropertySourcesPlaceholderConfigurer properties() { 
    return new PropertySourcesPlaceholderConfigurer(); 
} 

@PropertySource एनोटेशन स्वचालित रूप से वसंत के साथ एक PropertySourcesPlaceholderConfigurer रजिस्टर नहीं है। इसलिए हम स्पष्ट रूप से कॉन्फ़िगर करने के लिए PropertySourcesPlaceholderConfigurer

नीचे JIRA टिकट इस डिजाइन के पीछे तर्क के बारे में अधिक जानकारी नहीं है की जरूरत है:

https://jira.spring.io/browse/SPR-8539

अद्यतन: बनाया सरल स्प्रिंग बूट आवेदन नेस्टेड गुणों का उपयोग करने के लिए। यह उपरोक्त विन्यास के साथ ठीक काम कर रहा है।

https://github.com/mgooty/property-configurer/tree/master/complete

+0

उत्तर – Mithun

+0

अपडेट किया गया मुझे लगता है कि ओपी ने पहले से ही ऐसा किया है, और यह काम नहीं किया है, सवाल में उसका 'पीएस' देखें। मैं भटक जाता हूं अगर समस्या संपत्ति घोंसले से संबंधित है ('my.app.other = $ {my.app.service}/नमूना') – superbob

1

एक अन्य विकल्प PropertyPlaceholderAutoConfiguration.class आयात करने के लिए है।

import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; 

@Import(PropertyPlaceholderAutoConfiguration.class) 

एनोटेशन में संदर्भ में प्रॉपर्टी स्रोतस प्लेसहोल्डर कॉन्फ़िगरर शामिल है यदि यह मौजूद नहीं है।

+0

हां, यह ** वसंत-बूट ** आधारित संदर्भ के लिए काम करता है। –

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