स्प्रिंग बूट के application.properties में env वैरिएबल का उपयोग करना


199

हम एक स्प्रिंग बूट वेब ऐप पर काम कर रहे हैं और जिस डेटाबेस का हम उपयोग कर रहे हैं वह MySql है ;

  • हमारे पास जो सेटअप है, हम पहले उसका स्थानीय स्तर पर परीक्षण करते हैं (मतलब हमें अपने पीसी पर MySql को स्थापित करने की आवश्यकता है);

  • फिर हम बिटबकैट पर धक्का देते हैं ;

  • जेनकिंस स्वचालित रूप से बिटबकैट को नए धक्का का पता लगाता है और उस पर एक निर्माण करता है (जेनकिंस mvan के निर्माण के लिए पास करने के लिए हमें जेनस्किन चलाने वाली वर्चुअल मशीनों पर MySql को स्थापित करने की भी आवश्यकता है)।

  • यदि जेनकींस निर्माण गुजरता है हम पर हमारे आवेदन करने के लिए कोड धक्का OpenShift (जेनकींस पर OpenShift तैनाती प्लगइन का उपयोग)।

आपके पास पहले से मौजूद समस्या के बारे में हमें पता चल सकता है:

  • में application.propertiesहम MySql जानकारी कोड को हार्ड नहीं कर सकते। चूंकि हमारी परियोजना 3 अलग-अलग स्थानों ( स्थानीय , जेनकिंस , और ओपनशिफ्ट ) में चल रही होगी , इसलिए हमें डेटा स्रोत क्षेत्र को गतिशील बनाने की आवश्यकता है application.properties(हम जानते हैं कि इसे करने के अलग-अलग तरीके हैं लेकिन हम अभी के लिए इस समाधान पर काम कर रहे हैं)।

    spring.datasource.url = 
    spring.datasource.username = 
    spring.datasource.password = 

हम जिस समाधान के साथ आए हैं, वह है कि हम स्थानीय स्तर पर और जेनकिंस vm में सिस्टम वातावरण चर बनाते हैं (उनका नामकरण उसी तरह करते हैं जैसे OpenShift उनका नाम लेते हैं) और उन्हें क्रमशः सही मान प्रदान करते हैं:

export OPENSHIFT_MYSQL_DB_HOST="jdbc:mysql://localhost"
export OPENSHIFT_MYSQL_DB_PORT="3306"
export OPENSHIFT_MYSQL_DB_USERNAME="root"
export OPENSHIFT_MYSQL_DB_PASSWORD="123asd"

हमने यह किया है और यह काम करता है। हमने यह भी जाँच की है Map<String, String> env = System.getenv();कि पर्यावरण चर को जावा चर में बनाया जा सकता है जैसे:

String password = env.get("OPENSHIFT_MYSQL_DB_PASSWORD");   
String userName = env.get("OPENSHIFT_MYSQL_DB_USERNAME");   
String sqlURL = env.get("OPENSHIFT_MYSQL_DB_HOST"); 
String sqlPort = env.get("OPENSHIFT_MYSQL_DB_PORT");

अब केवल एक चीज बची है, हमें इन जावा वैरिएबल्स को अपने में उपयोग करने की आवश्यकता application.propertiesहै और इससे हमें परेशानी हो रही है।

जो फ़ोल्डर में, और कैसे, हम आवंटित करने के लिए की जरूरत है password, userName, sqlURL, और sqlPortके लिए चर application.propertiesउन्हें देखने के लिए और कैसे हम उन्हें शामिल करते हैं सक्षम होने के लिए application.properties?

हमने उनमें से एक होने की कई चीजों की कोशिश की है:

spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}

अब तक कोई भाग्य नहीं। हम शायद इन एनवी चर को सही वर्ग / फ़ोल्डर में नहीं डाल रहे हैं या गलत तरीके से इनका उपयोग कर रहे हैं application.properties

आपकी मदद अत्यधिक सराहनीय है!!

धन्यवाद!


3
अधिक जानने के लिए @ConfigurationProperties पढ़ें । हालाँकि, यह प्रोफाइल विशिष्ट कॉन्फ़िगरेशन गुणों के
एडी बी

जवाबों:


268

आपको जावा वैरिएबल का उपयोग करने की आवश्यकता नहीं है। सिस्टम env चर शामिल करने के लिए अपनी application.propertiesफ़ाइल में निम्नलिखित जोड़ें :

spring.datasource.url = ${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/"nameofDB"
spring.datasource.username = ${OPENSHIFT_MYSQL_DB_USERNAME}
spring.datasource.password = ${OPENSHIFT_MYSQL_DB_PASSWORD}

लेकिन @Stefan Isele द्वारा सुझाया गया तरीका अधिक श्रेयस्कर है, क्योंकि इस मामले में आपको सिर्फ एक एनर्जी वेरिएबल घोषित करना होगा spring.profiles.active:। वसंत application-{profile-name}.propertiesटेम्पलेट द्वारा स्वचालित रूप से उपयुक्त संपत्ति फ़ाइल पढ़ेगा ।


12
यह विधि docker linking के लिए अधिक सुविधाजनक है। उदाहरण के लिए:docker run --name my-tomcat -p 127.0.0.1:8080:8080 -e APP_DB_DB=mydb -e APP_DB_USER=dbuser -e APP_DB_PASS=dbpass --link mongo-myapp:mongo -v /path-to/tomcat/webapps:/usr/local/tomcat/webapps -d tomcat:8-jre8-alpine
फितरत KKK

17
यह पूरी तरह से जाने का सबसे अच्छा तरीका है। पर्यावरण चर का उपयोग करने का मतलब है कि आपको अपने आवेदन के साथ सादे पाठ में रहस्यों को सूचीबद्ध करने की आवश्यकता नहीं है। यह काफी अधिक सुरक्षित है और आपकी संपूर्ण संपत्ति की सुरक्षा के लिए आपके स्रोत कोड एक्सेस सुरक्षा उपायों पर निर्भरता को कम करता है। संपत्तियों के साथ एक आकस्मिक एसओ पोस्ट में जानकारी लीक होने का परिणाम नहीं है।
kipper_t

51
मैं इसमें जोड़ना चाहता था और उल्लेख करना चाहता था कि यदि आप स्प्रिंग बूट का उपयोग कर रहे हैं (यदि यह बूट के बिना काम नहीं करता है) तो आप किसी भी संपत्ति को अपने एप्लिकेशन को संशोधित किए बिना एक पर्यावरण चर के माध्यम से ओवरराइड कर सकते हैं। यानी, यदि आपके पास एक संपत्ति है, spring.activemq.broker-urlतो संबंधित पर्यावरण चर होगा SPRING_ACTIVEMQ_BROKER_URL:। अवधियों और डैश स्वचालित रूप से अंडरस्कोर में परिवर्तित हो जाते हैं। कंटेनर / स्प्रिंग बूट के साथ काम करते समय यह बेहद सुविधाजनक है।
अबे

15
यदि आप क्लाउड के लिए डिज़ाइन करते हैं तो यह स्प्रिंग प्रोफाइल का उपयोग करने का एक बेहतर तरीका नहीं है। 12 चर एप्लिकेशन मानक द्वारा पर्यावरण चर का उपयोग करने की सिफारिश की जाती है: 12factor.net/config
मिखाइल

6
मुझे पता है कि यह विषय थोड़ा पुराना है। लेकिन आप पर्यावरण चर संस्करण और स्प्रिंग प्रोफ़ाइल सेटअप दोनों को जोड़ सकते हैं। आपके पास प्रोफ़ाइल जानकारी स्थिर होनी चाहिए, जबकि आपकी उत्पादन प्रोफ़ाइल पर्यावरण चर का उपयोग कर सकती है। इस तरह से देव को अब अपनी मशीन पर पर्यावरण चर को परिभाषित करने की आवश्यकता नहीं है यदि वे विकास प्रोफ़ाइल को तैनात करना चाहते हैं।
अंडरस्कोर_05

72

विभिन्न परिवेशों के लिए अलग-अलग विन्यास का सबसे आसान तरीका है वसंत प्रोफाइल का उपयोग करना। बाहरी कॉन्फ़िगरेशन देखें ।

इससे आपको काफी लचीलापन मिलता है। मैं अपने प्रोजेक्ट्स में इसका इस्तेमाल कर रहा हूं और यह बेहद मददगार है। आपके मामले में आपके 3 प्रोफाइल होंगे: 'स्थानीय', 'जेनकिंस', और 'ओपनशिफ्ट'

इसके बाद आप 3 प्रोफ़ाइल विशिष्ट गुण फ़ाइलें: application-local.properties, application-jenkins.properties, औरapplication-openshift.properties

वहां आप पर्यावरण के संबंध में गुण निर्धारित कर सकते हैं। जब आप एप्लिकेशन चलाते हैं तो आपको इस तरह सक्रिय होने के लिए प्रोफ़ाइल निर्दिष्ट करना होगा: -Dspring.profiles.active=jenkins

संपादित करें

वसंत डॉक्टर के अनुसार आप SPRING_PROFILES_ACTIVEप्रोफाइल को सक्रिय करने के लिए सिस्टम वातावरण चर सेट कर सकते हैं और इसे एक पैरामीटर के रूप में पारित करने की आवश्यकता नहीं है।

क्या रन समय में वेब ऐप के लिए सक्रिय प्रोफ़ाइल विकल्प पास करने का कोई तरीका है?

सं। वसंत, सक्रिय प्रोफाइल को पहले चरण में से एक के रूप में निर्धारित करता है, जब अनुप्रयोग संदर्भ का निर्माण होता है। फिर सक्रिय प्रोफाइल का उपयोग यह तय करने के लिए किया जाता है कि कौन सी संपत्ति की फाइलें पढ़ी जाती हैं और कौन सी सेम का त्वरित मूल्यांकन किया जाता है। आवेदन शुरू होने के बाद इसे बदला नहीं जा सकता।


4
मुझे यह उत्तर पसंद है, लेकिन क्या होगा यदि आप चाहते हैं कि प्रोफ़ाइल नाम पर्यावरण से आए? मैंने कोशिश की है -Dspring.active.profiles = $ SPRING_ACTIVE_PROFILES, और /etc/profile.d/myenvvars.sh में OS env var सेट कर रहा हूं, लेकिन स्प्रिंग बूट नहीं चुनता है कि
टॉम हार्टवेल


5
इस उत्तर के लिए धन्यवाद स्टीफन, इसने मेरे लिए काम किया, लेकिन एक बदलाव के साथ - संपत्ति वास्तव में वसंत है। लाभकारी। सक्रिय और वसंत नहीं। सक्रिय
रुडी

10
जबकि ओपी के संबंध में स्प्रिंग प्रोफाइल बहुत उपयोगी हो सकते हैं, वे उपयुक्त नहीं हैं। इसका कारण यह है कि स्रोत कोड कैसे संग्रहीत किया जाता है और उस के साथ संग्रहीत जानकारी की जानकारी की संवेदनशीलता। डेटाबेस संदर्भ के आसपास ओपी संदर्भ है। उस स्थिति के लिए आप स्रोत में सादे पाठ में विवरण नहीं चाहते हैं। इसका मतलब है कि यदि स्रोत से छेड़छाड़ की जाती है तो डेटाबेस से भी समझौता किया जाता है। इसके लिए एन्ट वैरिएबल या सीक्रेट टूल्स का उपयोग करना बेहतर है बजाय इसके कि वॉल्ट जैसे। मैं एनवी पसंद करता हूं। मैं यह भी कहूंगा कि सभी वातावरण इसी तरह से स्थिरता के लिए काम करते हैं। यह भविष्य में होने वाली दुर्घटनाओं से बचता है।
kipper_t

2
आप एक स्प्रिंग बूट प्रोफाइल गुण फ़ाइल बाहरी JAR का उपयोग कर सकते हैं। उदाहरण के लिए, यह पर्यावरण-विशिष्ट फ़ाइल, application-production.propertiesउत्पादन मशीन में सुरक्षित तरीके से तैनात की जाएगी, और आमतौर पर एप्लिकेशन स्रोत कोड रिपॉजिटरी में नहीं होगी।
कॉलिन डी बेनेट

13

यह कई टिप्पणियों के जवाब में है क्योंकि मेरी प्रतिष्ठा सीधे टिप्पणी करने के लिए पर्याप्त नहीं है।

आप रनटाइम पर प्रोफ़ाइल निर्दिष्ट कर सकते हैं जब तक कि एप्लिकेशन संदर्भ अभी तक लोड नहीं किया गया है।

// Previous answers incorrectly used "spring.active.profiles" instead of
// "spring.profiles.active" (as noted in the comments).
// Use AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME to avoid this mistake.

System.setProperty(AbstractEnvironment.ACTIVE_PROFILES_PROPERTY_NAME, environment);
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/META-INF/spring/applicationContext.xml");

12

Flayway सीधे पर्यावरण चर को application.properties (स्प्रिंग-बूट V2.1) में नहीं पहचानता है । जैसे

spring.datasource.url=jdbc:mysql://${DB_HOSTNAME}:${DB_PORT}/${DB_DATABASE}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASS}

इस समस्या को हल करने के लिए मैंने इस पर्यावरण चर को किया, आमतौर पर मैं फ़ाइल बनाता हूं .env:

SPRING_DATASOURCE_URL=jdbc:mysql://127.0.0.1:3306/place
SPRING_DATASOURCE_USERNAME=root
SPRING_DATASOURCE_PASSWORD=root

और मेरे पर्यावरण के लिए चर निर्यात:

export $(cat .env | xargs)

और अंत में सिर्फ कमांड चलाएं

mvn spring-boot:run

या अपनी जार फ़ाइल चलाएं

java -jar target/your-file.jar

यहाँ एक और दृष्टिकोण: https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/maven-plugin/examples/run-env-variables.html


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

2
धन्यवाद @PatS, मैंने और अधिक विवरण जोड़े, आशा है कि यह उपयोगी होगा।
फेलिप जिरोती

1
बेहतरीन बदलाव। अपना उत्तर अपडेट करने के लिए धन्यवाद।
पेट्स

9

यहाँ एक स्निपेट कोड है जहाँ पर्यावरणीय गुणों की एक श्रृंखला के माध्यम से विभिन्न वातावरणों के लिए फाइलें लोड की जा रही हैं।

आपके आवेदन संसाधनों ( src / main / resource ) के तहत गुण फ़ाइल : -

 1. application.properties
 2. application-dev.properties
 3. application-uat.properties
 4. application-prod.properties

आदर्श रूप से, application.properties में सभी सामान्य गुण होते हैं जो सभी वातावरणों के लिए सुलभ होते हैं और पर्यावरण से संबंधित गुण केवल पर्यावरण पर ही काम करते हैं। इसलिए इन संपत्तियों को लोड करने का क्रम इस तरह से होगा -

 application.properties -> application.{spring.profiles.active}.properties.

यहाँ कोड स्निपेट: -

    import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.Resource;

    public class PropertiesUtils {

        public static final String SPRING_PROFILES_ACTIVE = "spring.profiles.active";

        public static void initProperties() {
            String activeProfile = System.getProperty(SPRING_PROFILES_ACTIVE);
            if (activeProfile == null) {
                activeProfile = "dev";
            }
            PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer
                    = new PropertySourcesPlaceholderConfigurer();
            Resource[] resources = new ClassPathResource[]
                    {new ClassPathResource("application.properties"),
                            new ClassPathResource("application-" + activeProfile + ".properties")};
            propertySourcesPlaceholderConfigurer.setLocations(resources);

        }
    }

2
क्या स्प्रिंग बूट इस परिदृश्य को बॉक्स से बाहर नहीं रखता है? यहाँ बाहरी विन्यास दस्तावेज
चिकनपेट

4

हो सकता है कि मैं इसे बहुत देर से लिखता हूं, लेकिन मुझे ऐसी ही समस्या हुई है जब मैंने गुणों को पढ़ने के तरीकों को ओवरराइड करने की कोशिश की है।

मेरी समस्या यह है कि: 1) env से संपत्ति पढ़ें यदि यह संपत्ति env 2 में सेट की गई है) सिस्टम संपत्ति से संपत्ति पढ़ें यदि इस संपत्ति को सिस्टम संपत्ति 3 में व्यवस्थित किया गया है) और अंतिम, आवेदन गुणों से पढ़ें।

इसलिए, इस समस्या के समाधान के लिए मैं अपने सेम कॉन्फ़िगरेशन क्लास में जाता हूं

@Validated
@Configuration
@ConfigurationProperties(prefix = ApplicationConfiguration.PREFIX)
@PropertySource(value = "${application.properties.path}", factory = PropertySourceFactoryCustom.class)
@Data // lombok
public class ApplicationConfiguration {

    static final String PREFIX = "application";

    @NotBlank
    private String keysPath;

    @NotBlank
    private String publicKeyName;

    @NotNull
    private Long tokenTimeout;

    private Boolean devMode;

    public void setKeysPath(String keysPath) {
        this.keysPath = StringUtils.cleanPath(keysPath);
    }
}

और @PropertySource में कारखाने को ओवरराइट करें। और फिर मैंने संपत्तियों को पढ़ने के लिए अपना कार्यान्वयन बनाया है।

    public class PropertySourceFactoryCustom implements PropertySourceFactory {

        @Override
        public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
            return name != null ? new PropertySourceCustom(name, resource) : new PropertySourceCustom(resource);
        }


    }

और PropertySourceCustom बनाया

public class PropertySourceCustom extends ResourcePropertySource {


    public LifeSourcePropertySource(String name, EncodedResource resource) throws IOException {
        super(name, resource);
    }

    public LifeSourcePropertySource(EncodedResource resource) throws IOException {
        super(resource);
    }

    public LifeSourcePropertySource(String name, Resource resource) throws IOException {
        super(name, resource);
    }

    public LifeSourcePropertySource(Resource resource) throws IOException {
        super(resource);
    }

    public LifeSourcePropertySource(String name, String location, ClassLoader classLoader) throws IOException {
        super(name, location, classLoader);
    }

    public LifeSourcePropertySource(String location, ClassLoader classLoader) throws IOException {
        super(location, classLoader);
    }

    public LifeSourcePropertySource(String name, String location) throws IOException {
        super(name, location);
    }

    public LifeSourcePropertySource(String location) throws IOException {
        super(location);
    }

    @Override
    public Object getProperty(String name) {

        if (StringUtils.isNotBlank(System.getenv(name)))
            return System.getenv(name);

        if (StringUtils.isNotBlank(System.getProperty(name)))
            return System.getProperty(name);

        return super.getProperty(name);
    }
}

इसलिए, इससे मुझे मदद मिली है।


4

स्प्रिंग संदर्भ 5.0 का उपयोग करके मैंने निम्न एनोटेशन के माध्यम से सिस्टम वातावरण के आधार पर सफलतापूर्वक सही संपत्ति फ़ाइल लोड करने में सफलता प्राप्त की है

@PropertySources({
    @PropertySource("classpath:application.properties"),
    @PropertySource("classpath:application-${MYENV:test}.properties")})

यहां MYENV मान सिस्टम वातावरण से पढ़ा जाता है और यदि सिस्टम वातावरण मौजूद नहीं है, तो डिफ़ॉल्ट परीक्षण पर्यावरण संपत्ति फ़ाइल लोड की जाएगी, अगर मैं गलत MYENV मान देता हूं - तो यह अनुप्रयोग शुरू करने में विफल हो जाएगा।

नोट: प्रत्येक प्रोफ़ाइल के लिए, आप बनाए रखना चाहते हैं - आपको एक एप्लिकेशन बनाने की आवश्यकता होगी- [प्रोफाइल] .property फ़ाइल और यद्यपि मैंने स्प्रिंग संदर्भ 5.0 का उपयोग किया था और स्प्रिंग बूट का नहीं - मेरा मानना ​​है कि यह स्प्रिंग 4.1 पर भी काम करेगा।


3

मुझे प्रश्न के लेखक के रूप में एक ही मुद्दे का सामना करना पड़ा। इस मामले में हमारे मामले के जवाब पर्याप्त नहीं थे क्योंकि मेरी टीम के प्रत्येक सदस्य का एक अलग स्थानीय वातावरण था और हमें निश्चित रूप से .gitignoreउस फ़ाइल की आवश्यकता थी जिसमें अलग-अलग db कनेक्शन स्ट्रिंग और क्रेडेंशियल्स थे, इसलिए लोग आम फ़ाइल को कमिट नहीं करते हैं गलती से और दूसरों के डीबी कनेक्शन को तोड़ दें।

उस शीर्ष पर जब हमने नीचे की प्रक्रिया का पालन किया, यह अलग-अलग वातावरणों पर तैनात करना आसान था और अतिरिक्त बोनस के रूप में हमें संस्करण नियंत्रण में किसी भी संवेदनशील जानकारी की आवश्यकता नहीं थी

PHP सिम्फनी 3 फ्रेमवर्क से विचार प्राप्त करना, जिसमें parameters.yml(.ignignored) है और parameters.yml.dist(जो कि एक नमूना है जो पहले वाले को बनाता है composer install),

मैंने नीचे दिए गए उत्तरों से ज्ञान का संयोजन निम्नलिखित किया: https://stackoverflow.com/a/35534970/986160 और https://stackoverflow.com/a/35535138/986160

मूल रूप से यह वसंत विन्यासों के उत्तराधिकार का उपयोग करने की स्वतंत्रता देता है और शीर्ष पर एक प्लस किसी भी अतिरिक्त संवेदनशील क्रेडेंशियल के माध्यम से कॉन्फ़िगरेशन के माध्यम से सक्रिय प्रोफ़ाइल का चयन करता है:

application.yml.dist (नमूना)

    spring:
      profiles:
        active: local/dev/prod
      datasource:
        username:
        password:
        url: jdbc:mysql://localhost:3306/db?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

application.yml (.gitignore-d देव सर्वर पर)

spring:
  profiles:
    active: dev
  datasource:
    username: root
    password: verysecretpassword
    url: jdbc:mysql://localhost:3306/real_db?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

application.yml (। स्थानीय-मशीन पर .ignignore-d)

spring:
  profiles:
    active: dev
  datasource:
    username: root
    password: rootroot
    url: jdbc:mysql://localhost:3306/xampp_db?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8

अनुप्रयोग- dev.yml (अतिरिक्त पर्यावरण विशिष्ट गुण संवेदनशील नहीं)

spring:
  datasource:
    testWhileIdle: true
    validationQuery: SELECT 1
  jpa:
    show-sql: true
    format-sql: true
    hibernate:
      ddl-auto: create-droop
      naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL57InnoDBDialect

एक ही .properties के साथ किया जा सकता है


0

अगर संपत्तियों की फाइलें बढ़ाई जाती हैं तो रन कॉन्फ़िगरेशन के बाद एनवायरनमेंट चर को आईडीई में जोड़ा जा सकता है

--spring.config.additional-स्थान = {} PATH_OF_EXTERNAL_PROP

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