2017-01-20 10 views
6

के बाहर गुण फ़ाइल को कैसे पढ़ा जाए, वहां 2 फ़ोल्डर्स, lib और conf हैं। सभी गुण फ़ाइलों को conf फ़ोल्डर में रखा जाता है, और जार lib foulder में रखा जाता है।स्प्रिंग बूट मेरे लक्षित फ़ोल्डर में जार

बूट वसंत के पिछले है, हम spring.xml में विन्यास निम्न का उपयोग @value

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

और की तरह जावा कोड में उपयोग करने के लिए:

@Value("${name}") 

private String name; 

लेकिन वसंत बूट में, मैं नहीं जावा कोड में ऐसा करने के बारे में जानें।

मैं निम्नलिखित की कोशिश की है, लेकिन काम नहीं

@Configuration 
@PropertySource(value = "classpath:aaa.properties") 
public class AppConfig { 
    @Bean 
    public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
    return new PropertySourcesPlaceholderConfigurer(); 
    } 
} 

उत्तर

13

में कॉन्फ़िग फ़ाइल को पढ़ सकता है मैं थोड़ा सवाल और विवरण के शीर्षक से उलझन में हूँ। उम्मीद है कि मैं आपको अपनी टिप्पणियों के साथ और भी भ्रमित नहीं करूंगा।

सामान्य रूप से, स्प्रिंग बूट परियोजना संरचना के साथ-साथ बाइनरी के निर्माण के बारे में बहुत ही विवादास्पद है। अनुशंसित तरीका (वसंत बूट राय) अंदर सभी निर्भरताओं (वसा जार) के साथ एक जार बनाने के लिए है। यदि आपको अपनी वसा जार (या युद्ध जो आपने बनाया है) के बाहर परिभाषित कॉन्फ़िगरेशन गुणों की आवश्यकता है, तो स्प्रिंग बूट कई विकल्प प्रदान करता है (संदर्भ 1 देखें)।

java -jar -Dspring.config.location=<path-to-file> myBootProject.jar 

सूचना है कि आप एक वातावरण चर का उपयोग करके कुछ इसी तरह कर सकते हैं परिभाषित करने के लिए: मैं झंडा (spring.config.location) एक प्रणाली संपत्ति के साथ सेट किया जा सकता है जो का उपयोग कर एक बाहरी फ़ाइल को इंगित करने के लिए अपने क्षुधा की तरह जहां आपकी बाहरी फाइल रहता है।

मुझे आशा है कि इससे मदद मिलती है!

संदर्भ: 1. https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

+0

धन्यवाद, इस प्रस्ताव महान मूल्य –

+0

क्या आप जानते हैं अगर मैं गुणा गुण फ़ाइलें, यह कैसे अलग कॉन्फ़िग कक्षा में पढ़ने के लिए? –

+0

क्या आप कई बाहरी फाइलों का जिक्र कर रहे हैं? – Alberto

1

मिले एक समाधान:

पहले एक वर्ग बना सकते हैं और @ConfigurationProperties

@ConfigurationProperties(prefix = "asdf", locations = "file:conf/aaa.properties") 
public class ASDF { 
    private String name; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

कृपया स्थानों में नोट जोड़ने के लिए, मैं का उपयोग फ़ाइल क्लासपाथ नहीं।

तो आपके आवेदन कक्षा में, @EnableConfigurationProperties

@SpringBootApplication 
@EnableConfigurationProperties({ASDF.class, BBB.class}) 
public class InitialBeanTestApplication { 

    public static void main(String[] args) { 
     SpringApplication.run(InitialBeanTestApplication.class, args); 
    } 
} 

जोड़ने तो आप conf फ़ोल्डर

0

मिला एक और समाधान।

प्रत्येक कॉन्फ़िगरेशन को एक application.properties फ़ाइलों में डाल दें, और कोड उपयोग में @Value ("$ {name}") पढ़ने के लिए।

और संसाधन फ़ोल्डर्स फ़ाइल को लक्ष्य कॉन्फ़िगर फ़ोल्डर में कॉपी करने के लिए एक असेंबली फ़ाइल का उपयोग करें।

और तैनाती के बाद, केवल config.properties फ़ाइल को कॉन्फ़िगर फ़ोल्डर में बदलने और एप्लिकेशन चलाने की आवश्यकता है।

क्योंकि यह वसंत बूट अनुवर्ती अनुक्रम में application.properties फ़ाइल को पढ़ता है।

•/config वर्तमान निर्देशिका

वर्तमान निर्देशिका

• एक classpath/config पैकेज

• classpath जड़

• में स्थित उप-निर्देशिका लेकिन यह एक गुणों के लिए काम करता है फ़ाइल। गुणों को गुणा करने के लिए नहीं

4

मुझे यकीन नहीं है कि आप मुझसे समान स्थिति से निपट रहे हैं, लेकिन मेरे मामले में मेरे पास एक जार और एक * प्रॉपर्टीज फ़ाइल है।

@Configuration 
public class ApplicationContext { 

    @Bean 
    public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
    PropertySourcesPlaceholderConfigurer properties = new PropertySourcesPlaceholderConfigurer(); 
    properties.setLocation(new FileSystemResource("application.properties")); 
    properties.setIgnoreResourceNotFound(false); 

    return properties; 
    } 
} 

जब मैं application.properties के स्थान की स्थापना कर रहा हूँ फाइल मैं FileSystemResource वस्तु है, जो मुझे properties.files पाने के लिए अनुमति देने के लिए बनाया: क्या मैं * .properties जार के बाहर स्थित फ़ाइल प्राप्त करने के लिए किया था अगले था जो जार के बगल में स्थित है। यदि आपकी .properties फ़ाइलें क्लासपाथ में हैं, उदाहरण के लिए, आप अन्य कक्षाओं (जैसे क्लासपाथ रिसोर्स) का उपयोग कर सकते हैं। आप पैकेज कक्षा org.springframework.core.io के तहत संसाधन ऑब्जेक्ट प्राप्त करने के लिए वसंत ऑफ़र के अन्य वर्गों को पढ़ सकते हैं।

मुझे आशा है कि यह टिप्पणियां मददगार होंगी।

+0

यह एक अधिक बहुमुखी समाधान प्रतीत होता है।यदि आप इसके बजाय 'setLocations' विधि का उपयोग करके एकाधिक स्थानों को सेट करना चाहते हैं। – SashikaXP

1

Spring Boot docs में उल्लेख किया है,

SpringApplication निम्न स्थानों में application.properties फाइलों से गुण लोड और उन्हें वसंत में जोड़ने पर्यावरण देगा:

  1. ए/वर्तमान की config उपनिर्देशिका निर्देशिका।
  2. वर्तमान निर्देशिका
  3. एक classpath/config पैकेज
  4. classpath जड़

सूची श्रेष्ठता द्वारा आदेश दिया गया है (गुण सूची में मौजूद स्थानों में उच्च परिभाषित कम स्थानों में परिभाषित से अग्रगामी)।

एक तरीका है कि बस 'कॉन्फिग' में अपनी 'conf' निर्देशिका का नाम बदलें और यह बिना किसी समस्या के काम करेगा। इसलिए जब तक आप ऊपर उल्लिखित 4 के अलावा किसी अन्य स्थान पर अपनी प्रॉपर्टी फ़ाइल नहीं चाहते हैं, तब तक अतिरिक्त कॉन्फ़िगरेशन करने की आवश्यकता नहीं है।

उस स्थिति में आप संपत्ति स्रोत को स्पष्ट रूप से परिभाषित कर सकते हैं।

@PropertySource("classpath:config.properties") 

और कई गुण के लिए फ़ाइल

@PropertySources({ 
    @PropertySource("classpath:config.properties"), 
    @PropertySource("classpath:logging.properties"), 
    @PropertySource(value="classpath:missing.properties", ignoreResourceNotFound=true) 
}) 
संबंधित मुद्दे