IntelliJ से चलने पर मैं स्प्रिंग बूट प्रोफ़ाइल कैसे सक्रिय करूं?


133

मेरे पास 5 वातावरण हैं:

 - local (my development machine)
 - dev
 - qc
 - uat
 - live
 - staging

मैं चाहता हूं कि प्रत्येक वातावरण के लिए अलग-अलग एप्लिकेशन प्रॉपर्टीज का उपयोग किया जाए, इसलिए मेरे पास निम्नलिखित प्रॉपर्टीज फाइलें हैं, जिनमें से प्रत्येक के पास एक अलग URL है:

 - application.properties  (containing common properties)
 - application-local.properties
 - application-dev.properties
 - application-qc.properties
 - application-uat.properties
 - application-live.properties

मैं IntelliJ का उपयोग कर रहा हूं और अपने स्थानीय मशीन पर ग्रैगल प्लगइन में bootRun का उपयोग करके अपना ऐप चला रहा हूं। मैं अन्य सभी वातावरणों पर एक ही एप्लिकेशन वॉर फ़ाइल को तैनात करने का उपयोग करूंगा, जो टॉमकैट चलाते हैं।

मैंने जोड़ने की कोशिश की है:

--spring.profiles.active = स्थानीय

स्क्रिप्ट मापदंडों के तहत रन कॉन्फ़िगरेशन के लिए।

मैंने जोड़ने की कोशिश की है

-Dspring.profiles.active = स्थानीय

VM विकल्पों के तहत रन कॉन्फ़िगरेशन के लिए।

न ही काम। मैं स्टार्टअप पर INFO संदेश कहता रहता हूं: कोई सक्रिय प्रोफ़ाइल सेट नहीं है, डिफ़ॉल्ट प्रोफाइल पर वापस गिर रहा है: डिफ़ॉल्ट

अगर मैं अपना ऐप विंडोज़ कमांड लाइन से चला रहा हूं

gradle bootRun

लेकिन मैंने पहले पर्यावरण चर सेट किया

set SPRING_PROFILES_ACTIVE=local

फिर सब कुछ काम करता है।

तो मेरा सवाल यह है कि मैं IntelliJ से बूटरन को चलाते समय अपनी स्थानीय स्प्रिंग बूट प्रोफाइल को कैसे सक्रिय करूं?


1
आप वहां ग्रेडिंग के माध्यम से एप्लिकेशन क्यों चला रहे हैं? क्या रन कॉन्फ़िगरेशन का उपयोग करना 10 गुना अधिक सुविधाजनक होगा? एक ऐसा क्षेत्र है जहाँ आप प्रोफाइल को सक्षम करने के लिए सेट कर सकते हैं ...
स्टीफन निकोल

मैं IntelliJ में रन कॉन्फ़िगरेशन का उपयोग कर रहा हूं, जैसा कि ऊपर बताया गया है। यह काम नहीं कर रहा है।
dleerob

2
नहीं आप नहीं हैं। मैं जिस बारे में बात कर रहा हूं वह है "स्प्रिंग बूट रन कॉन्फ़िगरेशन" रन -> कॉन्फ़िगरेशन संपादित करें> नया> स्प्रिंग बूट।
स्टीफन निकोल

आह हां, मैं स्प्रिंग बूट रन कॉन्फ़िगरेशन से दूर चला गया क्योंकि मुझे अपने build.gradle में application.properties में प्रोजेक्ट.प्रोपरेटी का विस्तार करने की आवश्यकता थी और अगर मैंने स्प्रिंग बूट रन कॉन्फ़िगरेशन का उपयोग किया, तो यह काम नहीं करता था। मैं उस मुद्दे को हल करने में
देखूंगा

1
स्प्रिंग बूट कॉन्फ़िगरेशन का उपयोग करना इसके मूल्य से अधिक परेशानी लगता है। 'मेक' बस संसाधनों की प्रतिलिपि बनाता है और निर्माण स्क्रिप्ट के अनुसार उन्हें फ़िल्टर / परिवर्तित नहीं करता है। फिर इसे 'मेक' के बजाय 'बिल्ड' से रन बनाने के लिए कहना केवल रन को फ्रीज करने का कारण बनता है। अगर मैं नीचे के उत्तर के अनुसार अपने पर्यावरण प्रविष्टि के साथ-साथ बूटरुन का उपयोग करता हूं, तो सभी ठीक काम करता है।
dleerob

जवाबों:


194

मैंने -Dspring.profiles.active=testVM विकल्पों में जोड़ा और फिर उस कॉन्फ़िगरेशन को फिर से चलाया। इसने पूरी तरह से काम किया।

इसके द्वारा सेट किया जा सकता है

  • का चयन Run | Edit Configurations...
  • Configurationटैब पर जाएं
  • Environmentप्रकट करने के लिए अनुभाग का विस्तार करेंVM options

मैं उसी स्थिति में फंस गया था लेकिन एक मेवेन परियोजना के लिए। सहायता के लिए धन्यवाद। हमने प्रत्येक परीक्षण फ़ाइल के लिए VM विकल्प निर्धारित किया है।
श्री9911

2
यह मेरे लिए भी काम नहीं करता है। मैं ढाल और दो मॉड्यूल (एपी और यूआई) का उपयोग करता हूं
विर्कोम

1
मेरे लिए भी काम नहीं करता है, यहाँ भी ढाल का उपयोग कर।
IARI

नमस्ते, मेरे पास एक ही मुद्दा है लेकिन यह फिक्स समस्या को ठीक नहीं करता है। यहाँ विन्यास का मतलब क्या है? यह कार्य के रूप में बस के रूप में फिर से सीखना है?
15:14 पर user1456110

मैंने उस विशेष परीक्षण को संपादित करने के बाद चलाया।
थॉम

82

यदि आप वास्तव में स्प्रिंग बूट रन कॉन्फ़िगरेशन का उपयोग करते हैं (वर्तमान में केवल अंतिम संस्करण में समर्थित है) "सक्रिय प्रोफ़ाइल" सेटिंग में प्रोफाइल को पूर्व-कॉन्फ़िगर करना आसान है।

यहाँ छवि विवरण दर्ज करें


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

जैसा कि ऊपर दिए गए उत्तर में बताया गया है: यदि यह आपके लिए काम नहीं कर रहा है, तो सुनिश्चित करें कि आप argsअपने Application.main()जैसे में गुजर रहे हैंSpringApplication.run( Application.class, args );
Xaero Degreaz

यह सुविधा केवल अंतिम संस्करण में समर्थित है।
जुलिएन मालिअज

यह इंगित करने के लिए @JulienMalige धन्यवाद। मैं अपने उत्तर को संपादित करूंगा।
डैनियल बुबेनहेम

11

इस आदेश को अपने build.gradle में जोड़ने का प्रयास करें

यहाँ छवि विवरण दर्ज करें

तो उस आकार को चलाने के लिए:

यहाँ छवि विवरण दर्ज करें


9

स्प्रिंग बूट लगता है कि वीएम विकल्पों को पढ़ने का तरीका बदल गया है क्योंकि यह विकसित होता है। जब आप इंटेलीज में एक एप्लिकेशन लॉन्च करते हैं और कुछ प्रोफ़ाइल सक्रिय करना चाहते हैं, तो यहां कुछ तरीका आज़माया गया है:

1. VM विकल्प बदलें

"रन" में "कॉन्फ़िगरेशन संपादित करें" खोलें, और "वीएम विकल्प" में, जोड़ें: -Dspring.profiles.active=local

यह वास्तव में मेरी एक परियोजना के साथ काम करता है Spring Boot v2.0.3.RELEASEऔर Spring v5.0.7.RELEASE, लेकिन किसी अन्य परियोजना के साथ Spring Boot v2.1.1.RELEASEऔर नहीं Spring v5.1.3.RELEASE

इसके अलावा, मावेन या जार के साथ चलने पर, लोगों ने इसका उल्लेख किया:

mvn spring-boot:run -Drun.profiles=dev

या

java -jar -Dspring.profiles.active=dev XXX.jar

(यहां देखें: स्प्रिंग बूट प्रोफाइल का उपयोग कैसे करें )

2. जेवीएम पास करना

यह कहीं उल्लेख किया गया है, कि यदि आप कुछ जेवीएम विकल्प निर्दिष्ट करते हैं, तो स्प्रिंग अनुप्रयोगों की प्रक्रिया को लॉन्च करने का तरीका बदल देता है; यह एक और प्रक्रिया की तलाश करता है और इसे प्राप्त होने वाली arg पास नहीं करेगा इसलिए यह काम नहीं करता है। इसे पास करने का एकमात्र तरीका है:

mvn spring-boot:run -Dspring-boot.run.jvmArguments="..."

फिर, यह मावेन के लिए है। https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html

3. सेटिंग (आवेदन) env var

दूसरी परियोजना के लिए मेरे लिए क्या काम करता है, पर्यावरण चर सेट कर रहा था, जैसा कि ऊपर कुछ उत्तर में वर्णित है: "कॉन्फ़िगरेशन संपादित करें" - "पर्यावरण चर", और:

SPRING_PROFILES_ACTIVE=local

1
Env var वास्तव में होना चाहिए SPRING_PROFILES_ACTIVE
जोश एम।

मैंने इसे "स्प्रिंग.प्रोफाइल.सक्रिय" जैसे IDEA "VM विकल्प" के "रन कॉन्फ़िगरेशन" में जोड़ा और यह काम करता है। हो सकता है कि urs जैसा दूसरा रूप सिस्टम गुणों में सिस्टम-वाइड का उपयोग किया जाता है?
पश्चिमीगंज

यदि आप इसे ~/.profileया इसके समान जोड़ रहे हैं , तो आपको उपयोग करना होगा SPRING_PROFILES_ACTIVE- spring.profiles.activeसंभावना केवल कमांड लाइन पर एक तर्क के रूप में काम करती है।
जोश एम।

1
आह .. तो तुम्हारा मतलब वही है जिस पर मुझे शक था; वास्तविक प्रणाली env न केवल अनुप्रयोग env। ठीक है मैं एक संपादन करता हूँ
पश्चिमीगंज

8

मैंने अपनी बिल्ड.ग्रेड से निम्नलिखित को जोड़ना समाप्त कर दिया:

bootRun {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "local"
}

test {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "test"
}

इसलिए अब जब IntelliJ से bootRun चल रहा है, तो यह "स्थानीय" प्रोफ़ाइल के लिए डिफ़ॉल्ट है।

हमारे अन्य वातावरणों पर, हम बस Tomcat में 'SPRING_PROFILES_ACTIVE' पर्यावरण चर सेट करेंगे।

मुझे यह यहाँ मिली एक टिप्पणी से मिला: https://github.com/spring-projects/spring-boot/pull/592


6

एक संभावित कारण यह हो सकता है कि आप कमांड लाइन मापदंडों को अनुप्रयोगों के मुख्य विधि में पारित नहीं करते हैं। मैंने कुछ हफ्ते पहले वही गलती की थी।

public static final void main(String... args) {
    SpringApplication.run(Application.class, args);
}

उत्तर और सुझाव के लिए धन्यवाद, हालांकि मैं तर्कों को पारित कर रहा हूं।
dleerob

इसने वास्तव में मेरी समस्या को ठीक कर दिया। किसी कारण से जब मैंने ग्रैडल का उपयोग करके प्रोजेक्ट बनाया, तो उसने मेरी Applicationकक्षा को ऑटो-जेनरेट नहीं किया, इसलिए इसे मेमोरी से हाथ से किया। argsचरण याद किया , और इसलिए रन कॉन्फ़िगरेशन में "सक्रिय प्रोफ़ाइल" बॉक्स काम नहीं किया - मुझे -Dspring.profiles.activeVM विकल्प बॉक्स में मैन्युअल रूप से पास करना था ।
Xaero Degreaz

3

मैं Intellij सामुदायिक संस्करण का उपयोग करता हूं। "रन / डिबग कॉन्फ़िगरेशन"> रनर टैब> पर्यावरण चर> क्लिक बटन "..." पर जाएं। जोड़ें: SPRING_PROFILES_ACTIVE = स्थानीय

spring.profiles.active



2

मेरे मामले में, मैंने VM विकल्पों में कॉन्फ़िगरेशन के नीचे उपयोग किया IntelliJथा, यह स्थानीय कॉन्फ़िगरेशन नहीं उठा रहा था, लेकिन इसके पुनरारंभ होने के बाद IntelliJसे IntelliJऔर सेवा से कॉन्फ़िगरेशन विवरण उठाया जाने लगा।

-Dspring.profiles.active=local

0

इसे इस्तेमाल करे। अपनी build.gradle फ़ाइल को निम्नानुसार संपादित करें।

ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }


-3

-Dspring.profiles.active=localकार्यक्रम के तर्कों के तहत सेट करें ।


मैंने अपने प्रश्न से उद्धरण हटा दिए हैं। मैं वास्तव में उद्धरणों का उपयोग नहीं कर रहा हूं, मैं सिर्फ यह दिखाने की कोशिश कर रहा था कि मैं रन कॉन्फ़िगरेशन फ़ील्ड में क्या डाल रहा हूं
dleerob

5
आप VM विकल्प का मतलब है!
मिखाइल मिखाइलिडिस

यह जवाब बहुत ही भ्रामक है क्योंकि कार्यक्रम के तर्क को एप्लिकेशन द्वारा मान्यता नहीं दी जाएगी!
युरानोस

यह उत्तर काम नहीं करेगा, जैसा कि अन्य लोगों द्वारा बताया गया है, यह इंटेलीज आइडिया में वीएम ऑप्शंस के तहत होना चाहिए न कि प्रोग्राम आर्ग्युमेंट्स में
abstractKarshit
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.