स्प्रिंग बूट 1.X और स्प्रिंग बूट 2.X के बारे में समान विकल्प और व्यवहार प्रदान नहीं करते हैं Externalized Configuration
।
एम। डीनम का बहुत अच्छा उत्तर स्प्रिंग बूट 1 विशिष्टताओं को संदर्भित करता है।
मैं यहां स्प्रिंग बूट 2 के लिए अपडेट करूंगा।
पर्यावरण गुण स्रोत और आदेश
स्प्रिंग बूट 2 एक बहुत ही विशेष PropertySource
क्रम का उपयोग करता है जिसे समझदार विचारों को मानने की अनुमति देने के लिए डिज़ाइन किया गया है। गुणों को निम्नलिखित क्रम में माना जाता है:
जब आपके घर की निर्देशिका (~ / .spring-boot-devtools.properties पर devtools सक्रिय है) पर देवताओल्स वैश्विक सेटिंग्स गुण।
@TestPropertySource
आपके परीक्षणों पर टिप्पणी।
@SpringBootTest#properties
एनोटेशन विशेषता आपके परीक्षणों पर। कमांड लाइन तर्क।
गुण SPRING_APPLICATION_JSON
(इनलाइन JSON वातावरण चर या सिस्टम गुण में एम्बेडेड) से।
ServletConfig
init पैरामीटर।
ServletContext
init पैरामीटर।
JNDI की विशेषताएँ java:comp/env
।
जावा सिस्टम गुण ( System.getProperties()
)।
ओएस पर्यावरण चर।
A RandomValuePropertySource
में केवल यादृच्छिक गुण हैं। *
आपके पैक किए गए जार ( application-{profile}.properties
और YAML वेरिएंट) के बाहर प्रोफ़ाइल-विशिष्ट अनुप्रयोग गुण ।
प्रोफ़ाइल-विशिष्ट एप्लिकेशन गुण आपके जार ( application-{profile}.properties
और YAML वेरिएंट) के अंदर पैक किए गए हैं ।
आपके पैक किए गए जार ( application.properties
और YAML वेरिएंट) के बाहर आवेदन गुण ।
आपके जार ( application.properties
और YAML वेरिएंट) के अंदर पैक किए गए आवेदन गुण ।
@PropertySource
आपकी @Configuration
कक्षाओं पर टिप्पणी । डिफ़ॉल्ट गुण (सेटिंग द्वारा निर्दिष्ट
SpringApplication.setDefaultProperties
)।
बाहरी गुणों की फाइलें निर्दिष्ट करने के लिए इन विकल्पों में आपकी रुचि होनी चाहिए:
आपके पैक किए गए जार ( application-{profile}.properties
और YAML वेरिएंट) के बाहर प्रोफ़ाइल-विशिष्ट अनुप्रयोग गुण ।
आपके पैक किए गए जार ( application.properties
और YAML वेरिएंट) के बाहर आवेदन गुण ।
@PropertySource
आपकी @Configuration
कक्षाओं पर टिप्पणी । डिफ़ॉल्ट गुण (सेटिंग द्वारा निर्दिष्ट
SpringApplication.setDefaultProperties
)।
आप इन 3 विकल्पों में से केवल एक का उपयोग कर सकते हैं या उन्हें अपनी आवश्यकताओं के अनुसार जोड़ सकते हैं।
उदाहरण के लिए केवल प्रोफ़ाइल-विशिष्ट गुणों का उपयोग करने वाले बहुत सरल मामलों के लिए पर्याप्त है लेकिन अन्य मामलों में आप प्रोफ़ाइल-विशिष्ट गुणों, डिफ़ॉल्ट गुणों और दोनों का उपयोग करना चाह सकते हैं @PropertySource
।
Application.properties फ़ाइलों के लिए डिफ़ॉल्ट स्थान
application.properties
फ़ाइलों के बारे में (और संस्करण), डिफ़ॉल्ट रूप से स्प्रिंग उन्हें लोड करता है और निम्नलिखित क्रम में इन में से उनके गुणों को जोड़ता है:
उच्च प्राथमिकताओं का शाब्दिक अर्थ है
classpath:/,classpath:/config/,file:./,file:./config/
:।
विशिष्ट नामों वाली संपत्तियों की फ़ाइलों का उपयोग कैसे करें?
डिफ़ॉल्ट स्थान हमेशा पर्याप्त नहीं होते हैं: डिफ़ॉल्ट फ़ाइल नाम (जैसे application.properties
) डिफ़ॉल्ट स्थान सूट नहीं कर सकते हैं। इसके अलावा, ओपी सवाल के रूप में आपको application.properties
(और संस्करण) के अलावा कई कॉन्फ़िगरेशन फ़ाइलों को निर्दिष्ट करने की आवश्यकता हो सकती है ।
तो spring.config.name
पर्याप्त नहीं होगा।
इस मामले में आपको spring.config.location
पर्यावरण संपत्ति (जो निर्देशिका स्थानों या फ़ाइल पथों की अल्पविराम से अलग की गई सूची है) का उपयोग करके एक स्पष्ट स्थान प्रदान करना चाहिए ।
फ़ाइल नाम पैटर्न के बारे में मुक्त होने के लिए निर्देशिकाओं की सूची में फ़ाइल पथों की सूची का पक्ष लें।
उदाहरण के लिए ऐसा करें:
java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
यह तरीका सबसे क्रिया है जो सिर्फ फ़ोल्डर को निर्दिष्ट करता है लेकिन यह हमारी कॉन्फ़िगरेशन फ़ाइलों को बहुत सूक्ष्मता से निर्दिष्ट करने और प्रभावी रूप से उपयोग किए गए गुणों को स्पष्ट रूप से दस्तावेज़ करने का तरीका भी है।
spring.config.location अब उन्हें जोड़ने के बजाय डिफ़ॉल्ट स्थानों को बदल देता है
स्प्रिंग बूट 1 के साथ, spring.config.location
तर्क स्प्रिंग वातावरण में निर्दिष्ट स्थान जोड़ता है।
लेकिन स्प्रिंग बूट 2 से, spring.config.location
स्प्रिंग द्वारा उपयोग किए गए डिफ़ॉल्ट स्थानों को वसंत वातावरण में निर्दिष्ट स्थानों द्वारा प्रतिस्थापित किया जाता है जैसा कि प्रलेखन में कहा गया है ।
जब कस्टम कॉन्फ़िगरेशन स्थानों का उपयोग करके कॉन्फ़िगर किया जाता है
spring.config.location
, तो वे डिफ़ॉल्ट स्थानों को बदल देते हैं। उदाहरण के लिए, यदि spring.config.location
मान के साथ कॉन्फ़िगर किया गया है
classpath:/custom-config/
, file:./custom-config/
, खोज क्रम निम्नलिखित हो जाता है:
file:./custom-config/
classpath:custom-config/
spring.config.location
अब यह सुनिश्चित करने का एक तरीका है कि किसी भी application.properties
फ़ाइल को स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए।
Uber JAR के लिए जो application.properties
फाइलों को पैकेज करने के लिए नहीं हैं , बल्कि यह अच्छा है।
spring.config.location
स्प्रिंग बूट 2 का उपयोग करते समय पुराने व्यवहार को बनाए रखने के लिए आप spring.config.additional-location
इसके बजाय नई संपत्ति का उपयोग कर सकते हैं, फिर spring.config.location
भी प्रलेखन द्वारा बताए गए स्थानों को जोड़ता है :
वैकल्पिक रूप से, जब कस्टम कॉन्फ़िगरेशन स्थानों का उपयोग करके कॉन्फ़िगर किया जाता है
spring.config.additional-location
, तो उन्हें डिफ़ॉल्ट स्थानों के अतिरिक्त उपयोग किया जाता है।
प्रयोग में
इसलिए यह मानते हुए कि ओपी प्रश्न में, आपके पास निर्दिष्ट करने के लिए 2 बाहरी गुण फ़ाइल हैं और 1 गुण फ़ाइल uber जार में शामिल हैं।
आपके द्वारा निर्दिष्ट केवल कॉन्फ़िगरेशन फ़ाइलों का उपयोग करने के लिए:
-Dspring.config.location=classpath:/job1.properties,classpath:/job2.properties,classpath:/applications.properties
डिफ़ॉल्ट स्थानों में इनसे विन्यास फाइल जोड़ने के लिए:
-Dspring.config.additional-location=classpath:/job1.properties,classpath:/job2.properties
classpath:/applications.properties
अंतिम उदाहरण में आवश्यक नहीं है क्योंकि डिफ़ॉल्ट स्थानों में वह है और वह डिफ़ॉल्ट स्थान यहां अधिलेखित नहीं हैं बल्कि विस्तारित हैं।
application.properties
हमेशा की तरह, लोड किया जाएगा के साथspring.config.location
आप अतिरिक्त विन्यास स्थानों है कि फ़ाइलों के लिए जाँच कर रहे हैं जोड़ सकते हैं (जो है, जब यह एक साथ समाप्त होता है/
) लेकिन अगर आप उन लोड किया जाएगा फ़ाइलों के लिए वहाँ जो अंक में की अल्पविराम द्वारा अलग सूची डाल दिया। इसे यहां