वसंत बूट में Application.yml या bootstrap.yml पर एक संपत्ति डालने के बीच क्या अंतर है?


251

वसंत बूट में Application.yml या bootstrap.yml पर एक संपत्ति डालने के बीच क्या अंतर है? Logging.config मामले में, एप्लिकेशन अलग काम करता है।


14
bootstrap.yml जहाँ तक मैं विशिष्ट देख सकता हूँ [ spring-cloud-config( cloud.spring.io/spring-cloud-config/… )) और यह सही कॉन्फ़िगरेशन खोजने के लिए उपयोग किया जाने वाला कॉन्फ़िगरेशन है। तो विन्यास वहाँ शायद पहले से भरा है application.properties/yaml
zapl

जवाबों:


297

मैंने सिर्फ Spring Cloudलोगों से पूछा है और सोचा है कि मुझे यहाँ जो जानकारी है उसे साझा करना चाहिए।

bootstrap.ymlपहले लोड किया गया है application.yml

यह आमतौर पर निम्नलिखित के लिए उपयोग किया जाता है:

  • स्प्रिंग क्लाउड कॉन्फ़िगरेशन सर्वर का उपयोग करते समय, आपको निर्दिष्ट spring.application.nameऔर spring.cloud.config.server.git.uriअंदर करना चाहिएbootstrap.yml
  • कुछ encryption/decryptionजानकारी

तकनीकी रूप से, bootstrap.ymlएक मूल स्प्रिंग द्वारा लोड किया जाता है ApplicationContext। वह जनक ApplicationContextजो उपयोग करता है उससे पहले लोड किया जाता है application.yml


6
क्या आप बता सकते हैं कि विन्यास सर्वर को इन मापदंडों को डालने की आवश्यकता क्यों है bootstrap.yml?
नव

31
स्प्रिंग क्लाउड का उपयोग करते समय, 'वास्तविक' कॉन्फ़िगरेशन डेटा आमतौर पर एक सर्वर से लोड होता है। URL (और अन्य कनेक्शन कॉन्फ़िगरेशन, जैसे पासवर्ड, आदि) प्राप्त करने के लिए, आपको पहले या "बूटस्ट्रैप" कॉन्फ़िगरेशन की आवश्यकता है। इस प्रकार, आप कॉन्फ़िगर सर्वर विशेषताओं को bootstrap.yml में डालते हैं, जिसका उपयोग वास्तविक कॉन्फ़िगरेशन डेटा को लोड करने के लिए किया जाता है (जो आमतौर पर एक एप्लिकेशन में मौजूद ओवरराइड करता है [यदि मौजूद है])।
माइक मेन्सल

10
कुछ बार मुझे आश्चर्य होता है कि जब वसंत नई रोमांचक सुविधाओं को लाता है तो यह विनिर्देशन पर अधिवेशन को पीछे छोड़ देता है या वे इसके पहले से ही सम्मेलन मान लेते हैं और कुछ भी निर्दिष्ट करने की आवश्यकता नहीं होती है और सब कुछ अपने आप हल हो जाएगा यदि वसंत नहीं तो वसंत बूट और भविष्य में वसंत हो सकता है- बूट-बूट;)
सौरभ

जब आप कहते हैं कि bootstrap.yml को application.yml से पहले लोड किया जाता है। लेकिन जब मैं application.yml निकालता हूं। मेरा आवेदन bootstrap.yml नहीं पढ़ा है। ऐसा क्यों है?
जेसी

हमें यह उजागर करने की आवश्यकता है कि बूटस्ट्रैप फ़ाइल कभी भी ओवरराइड नहीं होती है क्योंकि इसमें अधिक पूर्वता होती है। प्रलेखन टीम के वसंत के
केल्विन

84

bootstrap.yml या bootstrap.properties

यदि आप स्प्रिंग क्लाउड का उपयोग कर रहे हैं तो इसका केवल उपयोग / आवश्यकता है और आपके एप्लिकेशन का कॉन्फ़िगरेशन दूरस्थ कॉन्फ़िगरेशन सर्वर (जैसे स्प्रिंग क्लाउड कॉन्फ़िगरेशन सर्वर) पर संग्रहीत है।

प्रलेखन से:

स्प्रिंग क्लाउड एप्लिकेशन "बूटस्ट्रैप" संदर्भ बनाकर संचालित होता है, जो मुख्य एप्लिकेशन के लिए एक मूल संदर्भ है। बॉक्स से बाहर यह बाहरी स्रोतों से कॉन्फ़िगरेशन गुणों को लोड करने और स्थानीय बाहरी कॉन्फ़िगरेशन फ़ाइलों में गुणों को डिक्रिप्ट करने के लिए भी जिम्मेदार है

ध्यान दें कि bootstrap.ymlया में अतिरिक्त कॉन्फ़िगरेशन हो bootstrap.properties सकता है (जैसे डिफॉल्ट्स) लेकिन आमतौर पर आपको केवल यहां बूटस्ट्रैप कॉन्फिगरेशन की आवश्यकता होती है।

आमतौर पर इसमें दो गुण होते हैं:

  • कॉन्फ़िगरेशन सर्वर का स्थान ( spring.cloud.config.uri)
  • आवेदन का नाम ( spring.application.name)

स्टार्टअप पर, स्प्रिंग क्लाउड एप्लिकेशन के नाम के साथ कॉन्फ़िगरेशन सर्वर पर एक HTTP कॉल करता है और उस एप्लिकेशन के कॉन्फ़िगरेशन को वापस प्राप्त करता है।

application.yml या application.properties

मानक एप्लिकेशन कॉन्फ़िगरेशन समाहित करता है - आमतौर पर डिफ़ॉल्ट कॉन्फ़िगरेशन चूंकि बूटस्ट्रैप प्रक्रिया के दौरान प्राप्त कोई भी कॉन्फ़िगरेशन यहां परिभाषित कॉन्फ़िगरेशन को ओवरराइड करेगा।


34

मुनीष चंदेल , संस्करण 1.30, 25.03.2018 द्वारा पुस्तक " माइक्रोसिस्टर्स इंटरव्यू प्रश्न, फॉर जावा डेवलपर्स (स्प्रिंग बूट, स्प्रिंग क्लाउड, क्लाउड नेटिव एप्लिकेशन) के लिए इस उत्तर को बहुत खूबसूरती से समझाया गया है ।

इस पुस्तक से निम्नलिखित सामग्री ली गई है, और इस उत्तर का कुल श्रेय पुस्तक के लेखक मुनीश चंदेल को जाता है

application.yml

application.yml / application.properties फ़ाइल स्प्रिंग बूट अनुप्रयोगों के लिए विशिष्ट है। जब तक आप एक आवेदन के बाहरी गुण का स्थान बदलने, वसंत बूट हमेशा लोड होगा application.yml निम्न स्थान से:

/src/main/resources/application.yml

आप इस फ़ाइल में अपने आवेदन के लिए सभी बाहरी गुणों को संग्रहीत कर सकते हैं। किसी भी स्प्रिंग बूट प्रोजेक्ट में उपलब्ध होने वाले सामान्य गुण यहां देखे जा सकते हैं: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html आप इन गुणों को अपने अनुसार अनुकूलित कर सकते हैं आपके आवेदन की जरूरत के अनुसार। नमूना फ़ाइल नीचे दिखाया गया है:

spring:
    application:
        name: foobar
    datasource:
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost/test
server:
    port: 9000

bootstrap.yml

दूसरी ओर bootstrap.yml वसंत-क्लाउड-कॉन्फ़िगरेशन के लिए विशिष्ट है और एप्लिकेशन से पहले लोड किया गया है

यदि आप स्प्रिंग क्लाउड का उपयोग कर रहे हैं तो bootstrap.yml की आवश्यकता है और आपका माइक्रोफ़ोन कॉन्फ़िगरेशन किसी दूरस्थ स्प्रिंग क्लाउड कॉन्फ़िगरेशन सर्वर पर संग्रहीत है।

Bootstrap.yml के बारे में महत्वपूर्ण बातें

  1. स्प्रिंग क्लाउड कॉन्फ़िगरेशन सर्वर के साथ उपयोग करने पर, आप नीचे दिए गए गुणों का उपयोग करके एप्लिकेशन-नाम और कॉन्फ़िगरेशन स्थान निर्दिष्ट करेंगे।
spring.application.name: "एप्लिकेशन-नाम"
spring.cloud.config.server.git.uri: "git-uri-config"

  1. जब माइक्रोसर्विसेज (क्लाउड कॉन्फिग सर्वर के अलावा) के साथ उपयोग किया जाता है, तो हमें नीचे दिए गए गुणों का उपयोग करके कॉन्फ़िगरेशन सर्वर के एप्लिकेशन नाम और स्थान को निर्दिष्ट करना होगा
spring.application.name: 
spring.cloud.config.uri: 
  1. इस गुण फ़ाइल में युरेका सर्वर स्थान, एन्क्रिप्शन / डिक्रिप्शन संबंधित गुणों के लिए स्प्रिंग क्लाउड वातावरण से संबंधित अन्य कॉन्फ़िगरेशन हो सकते हैं।

स्टार्टअप पर, स्प्रिंग क्लाउड एप्लिकेशन के नाम के साथ स्प्रिंग क्लाउड कॉन्फ़िगरेशन सर्वर को HTTP (एस) कॉल करता है और उस एप्लिकेशन के कॉन्फ़िगरेशन को वापस प्राप्त करता है।

application.yml में microservice के लिए डिफ़ॉल्ट कॉन्फ़िगरेशन होता है और बूटस्ट्रैप प्रक्रिया के दौरान पुनर्प्राप्त (क्लाउड कॉन्फिग सर्वर से) किसी भी कॉन्फ़िगरेशन को एप्लिकेशन में परिभाषित कॉन्फ़िगरेशन को ओवरराइड कर देगा।


5

बस मेरे 2 सेंट यहाँ ..

Bootstrap.yml या Bootstrap.properties को स्प्रिंग क्लाउड सर्वर से कॉन्फिगर लाने के लिए उपयोग किया जाता है।

उदाहरण के लिए, My Bootstrap.properties फ़ाइल में मेरे पास निम्न कॉन्फ़िगरेशन है

spring.application.name=Calculation-service
spring.cloud.config.uri=http://localhost:8888

एप्लिकेशन शुरू करने पर, यह http: // localhost: 8888 से जुड़कर सेवा के लिए कॉन्फ़िगरेशन लाने की कोशिश करता है और स्प्रिंग क्लाउड कॉन्फ़िगरेशन सर्वर में मौजूद गणना- service.properties को देखता है।

जब आप इसे शुरू करते हैं, तो आप Calcuation-Service के लॉग से इसे मान्य कर सकते हैं

INFO 10988 --- [ restartedMain] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888


4

ठीक है, मैं इस बिंदु पर पहले से मौजूद उत्तरों से पूरी तरह सहमत हूं:

  • bootstrap.ymlउन मापदंडों को सहेजने के लिए उपयोग किया जाता है जो इंगित करते हैं कि दूरस्थ कॉन्फ़िगरेशन कहाँ है और बूटस्ट्रैप एप्लिकेशन संदर्भ इन दूरस्थ कॉन्फ़िगरेशन के साथ बनाया गया है।

दरअसल, यह सामान्य गुणों को स्टोर करने में भी सक्षम है जैसा कि क्या application.ymlकरते हैं। लेकिन इस मुश्किल बात पर ध्यान दें:

  • यदि आप प्रॉपर्टी में जगह करते हैं bootstrap.yml, तो उन्हें application.yml सहित लगभग किसी भी अन्य संपत्ति स्रोतों से कम वरीयता मिलेगी। जैसा यहाँ बताया गया है

आइए इसे स्पष्ट करें, दो प्रकार के गुण हैं bootstrap.yml:

  • गुण जो बूटस्ट्रैप चरण के दौरान लोड किए गए हैं। हम bootstrap.ymlगुण धारक (ए फ़ाइल सिस्टम, गिट रिपॉजिटरी या कुछ और) को खोजने के लिए उपयोग करते हैं, और इस तरह से मिलने वाले गुण उच्च पूर्वता के साथ हैं, इसलिए उन्हें स्थानीय कॉन्फ़िगरेशन द्वारा ओवरराइड नहीं किया जा सकता है। जैसा यहाँ बताया गया है
  • गुण जो अंदर हैं bootstrap.yml। जैसा कि जल्दी बताया गया है, उन्हें कम वरीयता मिलेगी। एक अच्छा विचार शायद चूक सेट करने के लिए उनका उपयोग करें।

तो application.ymlया bootstrap.ymlवसंत बूट में एक संपत्ति डालने के बीच के अंतर हैं:

  • बूटस्ट्रैप चरण में कॉन्फ़िगरेशन फ़ाइलों को लोड करने के लिए गुण केवल में रखा जा सकता है bootstrap.yml
  • अन्य सभी प्रकार की संपत्तियों के लिए, उन्हें application.ymlउच्च वरीयता प्राप्त होगी।

3

Bootstrap.yml का उपयोग सर्वर से config लाने के लिए किया जाता है। यह स्प्रिंग क्लाउड एप्लिकेशन के लिए या दूसरों के लिए हो सकता है। आमतौर पर ऐसा दिखता है:

spring:
  application:
    name: "app-name"
  cloud:
    config:
      uri: ${config.server:http://some-server-where-config-resides}

जब हम एप्लिकेशन शुरू करते हैं तो यह दिए गए सर्वर से कनेक्ट करने की कोशिश करता है और रन / डीबग कॉन्फ़िगरेशन में उल्लिखित स्प्रिंग प्रोफ़ाइल के आधार पर कॉन्फ़िगरेशन को पढ़ता है। bootstrap.yml पहले लोड करता है

यदि सर्वर अप्राप्य है तो अनुप्रयोग आगे बढ़ने में असमर्थ हो सकता है। हालाँकि, यदि प्रोफ़ाइल से मेल खाने वाले कॉन्फ़िगरेशन स्थानीय रूप से मौजूद हैं, तो सर्वर कॉन्फ़िगरेशन ओवरराइड हो जाता है।

अच्छी एप्रोच:

स्थानीय के लिए एक अलग प्रोफ़ाइल बनाए रखें और विभिन्न प्रोफ़ाइलों का उपयोग करके ऐप चलाएं।


1

के लिए एक और उपयोग bootstrap.yml Kubernetes से लोड विन्यास है configmap और गुप्त संसाधनों। आवेदन वसंत-बादल-स्टार्टर-कुबेरनेट्स निर्भरता को आयात करना चाहिए ।

स्प्रिंग क्लाउड कॉन्फ़िगरेशन के साथ, इसे बूटस्ट्रैप वाक्यांश के दौरान जगह लेनी होगी।

डॉक्स से:

spring:
  application:
    name: cloud-k8s-app
  cloud:
    kubernetes:
      config:
        name: default-name
        namespace: default-namespace
        sources:
         # Spring Cloud Kubernetes looks up a ConfigMap named c1 in namespace default-namespace
         - name: c1

तो meta.name डिफ़ॉल्ट-नाम के साथ configmap संसाधन में संग्रहीत गुणों को केवल application.yml में गुणों के रूप में संदर्भित किया जा सकता है

और यही प्रक्रिया रहस्यों पर लागू होती है:

spring:
  application:
    name: cloud-k8s-app
  cloud:
    kubernetes:
      secrets:
        name: default-name
        namespace: default-namespace
        sources:
         # Spring Cloud Kubernetes looks up a Secret named s1 in namespace default-namespace
         - name: s1

0

Bootstrap.yml पहली फाइल लोड होती है जब आप स्प्रिंग बूट एप्लिकेशन शुरू करते हैं और एप्लिकेशन शुरू होने पर एप्लिकेशन लोड हो जाता है। इसलिए, आप अपने config सर्वर के क्रेडेंशियल्स आदि को bootstrap.yml में रख सकते हैं, जो कि लोडिंग एप्लिकेशन के दौरान आवश्यक है और फिर Application.properties में आपके पास डेटाबेस URL आदि हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.