2013-01-08 17 views
11

सेट करने के लिए स्प्रिंग 3.1 @PropertySource को ओवरराइड करने के लिए कैसे करें इस कक्षा को किसी अन्य कॉन्फ़िगर क्लास में पहले से सेट @PropertySource को ओवरराइड करने के लिए।IgnoreResourceNotFound और IgnoreUnresolvablePlacehold

@Configuration 
@PropertySource({ "classpath:${env.placeholder}/app.properties" }) 
public class PropertyOverrideConfig { 

} 

लेकिन जब भी फ़ाइल या प्लेसहोल्डर गुम हो जाता है, तो यह संदर्भ लोडिंग में विफल रहता है। मुझे उस एनोटेशन लोडेड प्रॉपर्टी में निम्नलिखित झंडे सेट करने की ज़रूरत है, ताकि अगर यह संपत्ति नहीं ढूंढ पाती है तो यह छोड़ जाएगी।

 setIgnoreResourceNotFound(true); 
     setIgnoreUnresolvablePlaceholders(true); 

Question1: क्या @PropertySource के इन चिह्नों स्थापित करने के लिए उचित तरीका क्या होगा?

अपडेट: कि एनोटेशन this पेज चर्चा करते हुए या तो, यह संपत्ति फ़ाइल उठा नहीं है बिना एक ही वर्ग के लिए एक @Bean जोड़ने की कोशिश की। मेरे पास एक्सएमएल कॉन्फ़िगरेशन नहीं है।

@Bean 
public static PropertySourcesPlaceholderConfigurer properties() { 
    final PropertySourcesPlaceholderConfigurer pspc = new PropertySourcesPlaceholderConfigurer(); 

    Resource[] resources = new ClassPathResource[ ] { 
        new ClassPathResource("classpath:${env.placeholder}/app.properties") }; 

    pspc.setLocations(resources); 
    pspc.setIgnoreResourceNotFound(true); 
    pspc.setIgnoreUnresolvablePlaceholders(true); 
    return pspc; 
} 

Question2: मुझे यकीन है कि मैं कुछ याद कर रहा हूँ, लेकिन यह पता लगाने नहीं कर सकता है कि यह क्या है, किसी भी मदद बहुत अच्छा होगा।

+0

क्या आप सुनिश्चित हैं कि कोई अन्य PropertySourcesPlaceholder कॉन्फ़िगरर उदाहरण पंजीकृत नहीं हैं? हो सकता है कि आपको '@ बीन 'एनोटेटेड विधि बनाना चाहिए जो प्रॉपर्टी स्रोत्स प्लेसहोल्डर कॉन्फ़िगरर स्टेटिक (जैसा कि' बीन' अनुशंसाओं के लिए जावा डॉक के रूप में) देता है –

+0

धन्यवाद @ बोरीस्रेखोवोव, पोस्ट करते समय मैं स्थैतिक चूक गया। इस बीच, क्या होगा, अगर मेरे पास 'PropertySourcesPlaceholderConfigurer' पहले से ही एक अलग कॉन्फ़िगरेशन पर बीन पंजीकृत है ?? – raksja

+0

मुझे बिल्कुल याद नहीं है, लेकिन आपके पास कई PropertySourcesPlaceholderConfigurers (और उन्हें अलग प्लेसहोल्डर उपसर्ग/प्रत्यय निर्दिष्ट कर सकते हैं) - शायद एक और प्लेसहोल्डर कॉन्फ़िगरर है जो अनजान प्लेसहोल्डर्स –

उत्तर

4

मुझे लगता है कि मैं अंत में Question1 के लिए इस सवाल का जवाब पता लगा:

कैसे @PropertySource के माध्यम से जोड़ा संपत्तियों के लिए पर ध्यान न दें झंडे स्थापित करने के लिए?

इसकी वहाँ नहीं वसंत में अब भी है, इसकी एक माइनर सुधार के रूप में प्रस्तावित किया गया। उम्मीद है कि भविष्य में रिलीज में जल्द ही एनोटेशन में जोड़ा गया अतिरिक्त गुण देख पाएगा।

SPR-8371

फिर भी जिस तरह से परिदृश्य का उल्लेख पूरा करने के लिए और Question2 के लिए कोई जवाब नहीं बारे में निश्चित नहीं। आप 3 वसंत के रहना है, तो

new ClassPathResource("classpath:${env.placeholder}/app.properties") }; 
+1

भी [एसपीआर -10325] (https : //jira.springsource.org/browse/SPR-10325): "@PropertySource पर ignoreResourceNotFound के लिए अनुमति दें", इसके लिए वोट दें! – Robin

0

जब ClassPathResource का उपयोग कर classpath: निकालने का प्रयास करें, यह आवश्यक नहीं है का उपयोग एक डमी डिफ़ॉल्ट है, जो मौजूद है, यानी आपके मामले में:

@PropertySource({ "classpath:${env.placeholder:dummy}/app.properties" }) 
1

नहीं वास्तव में एक समाधान है, लेकिन कोई समाधान,: