स्प्रिंग बूट में कमांड लाइन से सक्रिय प्रोफ़ाइल और कॉन्फ़िगरेशन स्थान सेट करना


164

मेरे पास एक स्प्रिंग बूट एप्लिकेशन है।

मेरे आवेदन में तीन प्रोफाइल हैं- > विकास, मंचन और उत्पादन । तो मेरे पास 3 फाइलें हैं

  1. आवेदन-development.yml
  2. आवेदन-staging.yml
  3. आवेदन-production.yml

मेरा एप्लिकेशन .ym अंदर रहता है src/main/resources। मैंने अनुप्रयोग में सक्रिय प्रोफ़ाइल सेट किया है:

spring:
  profiles.active: development

अन्य 3 प्रोफ़ाइल विशिष्ट कॉन्फ़िगरेशन फ़ाइलें C:\configफ़ोल्डर में मौजूद हैं ।

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

 -Dspring.profiles.active=staging -Dspring.config.location=C:\Config

हालांकि, कमांड लाइन की संपत्ति परिलक्षित नहीं हो रही है और मेरी सक्रिय प्रोफ़ाइल हमेशा विकास के रूप में सेट हो रही है (जो कि मैंने उन अनुप्रयोगों में उल्लेख किया है। हाइमल फ़ाइल)। इसके अलावा C: \ config फ़ोल्डर प्रोफ़ाइल विशिष्ट कॉन्फ़िगरेशन फ़ाइलों के लिए नहीं खोजा गया है।

मुझे लगता है कि मुझे यहां कुछ याद आ रहा है। मैं पिछले 2 दिनों से इसका पता लगाने की कोशिश कर रहा हूं। लेकिन भाग्य नहीं। मेरे द्वारा किसी भी सहायता की वास्तव में सराहना की जाएगी।


क्या आप कृपया अपनी bootRunकमांड लाइन को भी जोड़ सकते हैं
बीजू कुंजुमेन

मैं इसे ग्रहण से चला रहा था और अब तक कमांड लाइन नहीं। लेकिन मैंने "gradle bootRun -Dspring.config.location = C: \ config \ -Dspring.profiles.active = स्टेजिंग" का उपयोग करके चलने की कोशिश की और उसी परिणाम को प्राप्त किया।
O-OF-N

जवाबों:


341

कमांड लाइन पर स्प्रिंग प्रॉपर्टीज को जोड़ने / ओवरराइड करने के दो अलग-अलग तरीके हैं।

विकल्प 1: जावा सिस्टम गुण (VM तर्क)

यह महत्वपूर्ण है कि -D पैरामीटर आपके Application.jar से पहले हैं अन्यथा वे पहचाने नहीं जाते हैं।

java -jar -Dspring.profiles.active=prod application.jar

विकल्प 2: कार्यक्रम तर्क

java -jar application.jar --spring.profiles.active = ठेस --spring.config.location =: \ config

45
-D मापदंडों का क्रम वास्तव में महत्वपूर्ण है :)
martin

3
टॉमकैट कंटेनर कहने के लिए आप इसे कैसे प्राप्त कर सकते हैं? उस स्थिति में मैंने अपना युद्ध टॉमकट के वेबैप फ़ोल्डर में डाल दिया, मैं प्रोफाइल जानकारी कैसे प्रदान करूं? सिस्टम गुण सेट करके?
प्रयागपाद

@prayagupd हाँ, आपके सिस्टम के गुण आपके bash_profile में सेट हो सकते हैं।
शुभकामनाएं

2
@maneesh हाँ, मैं के माध्यम से निर्यात चर चर का उपयोग कर रहा हूँ । SPRING_PROFILES_ACTIVE~/.bash_profileexport SPRING_PROFILES_ACTIVE=e2e
प्रयागपाद

1
जब आप कहते हैं कि आदेश महत्वपूर्ण है: क्या हम दोनों तरह से पास हो सकते हैं: -Dspring.profile.active और -Dspring.config.location ऐसे, प्रोफ़ाइल पहले तर्क के अनुसार सेट की गई है और संपत्ति फ़ाइल के अनुसार ली गई है दूसरा आर्ग्स? जैसे:java -Dspring.profiles.active=$ENV -Dspring.config.location=file:///aws-secrets-manager/properties/application-$ENV.properties /code/app.jar
प्रमोद सेतलुर

26

मेरा सबसे अच्छा अभ्यास यह एक VM "-D" तर्क के रूप में परिभाषित करना है। कृपया स्प्रिंग बूट 1.x और 2.x के बीच अंतर पर ध्यान दें।

सक्षम करने के लिए प्रोफाइल को कमांड लाइन पर निर्दिष्ट किया जा सकता है:

वसंत-बूट 2.x

-Dspring-boot.run.profiles=local

स्प्रिंग-बूट 1.x

-Dspring.profiles.active=local

उदाहरण के साथ मावेन का उपयोग:

वसंत-बूट 2.x

mvn spring-boot:run -Dspring-boot.run.profiles=local

स्प्रिंग-बूट 1.x

mvn spring-boot:run -Dspring.profiles.active=local

कई प्रोफाइल के लिए उन्हें अल्पविराम से अलग करना सुनिश्चित करें:

mvn spring-boot:run -Dspring.profiles.active=local,foo,bar
mvn spring-boot:run -Dspring-boot.run.profiles=local,foo,bar

आपका मतलब है वसंत / वसंत-बूट? (स्प्रिंग 1x और स्प्रिंग 2x)!
स्माइलीफेस

1
@smilyface वसंत बूट। स्प्रिंग बूट विभिन्न संस्करणों में भी उपलब्ध है: mvnrepository.com/artifact/org.springframework.boot/spring-boot
Sma Ma

2
मैं स्प्रिंग-बूट 2.1.3 का उपयोग करता हूं, और -Dspring-boot.run.profiles=localकाम नहीं किया, -Dspring.profiles.active=localकाम किया।
डोंगुआ लिउ

वसंत-बूट 2.2.0: दोनों काम करते हैं: -Dspring-boot.run.profilesऔर-Dspring.profiles.active
ग्रिगोरी किसलिन

17

मुझे इसे जोड़ना था:

bootRun {
    String activeProfile =  System.properties['spring.profiles.active']
    String confLoc = System.properties['spring.config.location']
    systemProperty "spring.profiles.active", activeProfile
    systemProperty "spring.config.location", "file:$confLoc"
}

और अब bootRun प्रोफाइल और कॉन्फिग लोकेशन उठाता है।

पॉइंटर के लिए बहुत बहुत धन्यवाद @jst।


7
यह निम्नलिखित के रूप में और भी सरल हो सकता है bootRun { systemProperties = System.properties }:। यह कमांड मैप -Dमें एक ही कुंजी के साथ स्विच के साथ पारित सभी मापदंडों को कॉपी करेगा systemProperty
एडूफ़िन

ऐसा लगता है कि केवल एक समाधान है, क्या कोई आनुवांशिक समाधान नहीं है?
user1767316

1
वास्तव में आप इसे कहां जोड़ रहे हैं? कहीं भी build.gradle फ़ाइल में या फ़ाइल के भीतर किसी विशिष्ट स्थान पर?
स्काला सरगर्म

16
-Dspring.profiles.active=staging -Dspring.config.location=C:\Config

सही नहीं है।

होना चाहिए:

--spring.profiles.active=staging --spring.config.location=C:\Config

3
यह त्रुटि "अज्ञात विकल्प: --spring.config.location" का कारण बनता है
जेम्स वॉटकिंस

-D जावा सिस्टम प्रॉपर्टीज को सेट करने का सही तरीका है। - शेष एक बैश पैरामीटर है।
Xdg

- मेरे लिए ssinging.profiles.active कार्य, वही बात जो मैंने docs.spring.io/spring-boot/docs/current/reference/html/…
पुष्कर

रन के रूप में उपयोग करने पर यह मेरे लिए भी काम करता है -> ग्रहण में जावा एप्लीकेशन
ओलिवियर बोइस

11
वास्तव में दोनों सही हैं, यह इस बात पर निर्भर करता है कि इसका उपयोग कैसे किया जाता है: यह java -Dspring.profiles.active=staging -Dspring.config.location=C:\Config your-spring-boot-app.jarOR हो सकता हैjava your-spring-boot.jar --spring.profiles.active=staging --spring.config.location=C:\Config
Dexter Legaspi

9

आप निम्न कमांड लाइन का उपयोग कर सकते हैं:

java -jar -Dspring.profiles.active=[yourProfileName] target/[yourJar].jar

9

OS चर सेट करके एक और तरीका है , SPRING_PROFILES_ACTIVE

उदाहरण के लिए:

SPRING_PROFILES_ACTIVE=dev gradle clean bootRun

संदर्भ: सक्रिय स्प्रिंग प्रोफाइल कैसे सेट करें


हां, और यह आवेदन के माध्यम से ग्रैडल हैंड सिस्टम के गुणों के साथ घुलने-मिलने की जरूरत से बचता है।
ben3000

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

7

मावेन प्लगइन के माध्यम से प्रोफ़ाइल सेट करते समय आपको इसके माध्यम से करना होगाrun.jvmArguments

mvn spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=production"

डिबग विकल्प के साथ:

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -Dspring.profiles.active=jpa"

मैंने इस यात्रा को बहुत सारे लोगों को देखा है..इससे मदद मिलती है


1
बदल गया है mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar, देखें: docs.spring.io/spring-boot/docs/current/maven-plugin/examples/…
rwenz3l

@ rwenz3l धन्यवाद! मेरे लिए यह काम करता है, बस स्प्रिंग बूट 1 से 2 तक के प्रोजेक्ट को अपग्रेड किया है। अब मैं उन सभी को अपने bashrc में जोड़ता हूं ... springmvn="mvn clean spring-boot:run -Dspring.profiles.active=local -Dspring-boot.run.profiles=local"
जॉन स्मिथ

5

मुझे लगता है कि आपकी समस्या आपके स्प्रिंग से संबंधित है ।config.location "/" के साथ पथ को समाप्त नहीं करता है।

डॉक्स को उद्धृत करें

यदि spring.config.location में निर्देशिकाएं होती हैं (फ़ाइलों के विपरीत) तो उन्हें / में समाप्त होना चाहिए (और लोड होने से पहले spring.config.name से उत्पन्न नामों के साथ जोड़ा जाएगा)।

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-application-property-files


यह इंगित करने के लिए धन्यवाद। हालाँकि, जब मैं चलाता हूँ -Dspring.profiles.active = स्टेजिंग -Dspring.config.location = C: \ config \ भी मुझे एक ही मुद्दा देता है। यहां तक ​​कि सक्रिय प्रोफ़ाइल परिलक्षित नहीं हो रही है। मुझे लगता है कि किसी कारण से मेरी कमांड लाइन खत्म नहीं हो रही है।
O-OF-N

1
इस सवाल में दी गई सलाह का पालन करना चाहिए ताकि आप args को bootRun stackoverflow.com/questions/25079244/…
jst

धन्यवाद। इससे वाकई मदद मिली।
O-OF-N

4

माइकल यिन का जवाब सही है लेकिन एक बेहतर व्याख्या की आवश्यकता प्रतीत होती है!

आप में से कई ने उल्लेख किया है कि -Dजेवीएम मापदंडों को निर्दिष्ट करने का सही तरीका है और आप बिल्कुल सही हैं। लेकिन माइकल भी ठीक है जैसा कि स्प्रिंग बूट प्रोफाइल प्रलेखन में उल्लेख किया गया है ।

दस्तावेज़ीकरण में जो स्पष्ट नहीं है, वह किस प्रकार का पैरामीटर है: --spring.profiles.activeयह एक मानक JVM पैरामीटर नहीं है, इसलिए यदि आप इसे अपने IDE में उपयोग करना चाहते हैं तो सही फ़ील्ड भरें (यानी प्रोग्राम आर्ग्युमेंट्स)


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