2016-12-05 5 views
5

हमारे पास प्रति पर्यावरण अलग-अलग कॉन्फ़िगर सर्वर हैं। प्रत्येक वसंत बूट एप्लिकेशन को इसके संबंधित कॉन्फ़िगरेशन सर्वर को लक्षित करना चाहिए। मैं, bootstrap.properties फ़ाइल में प्रोफाइल की स्थापना जैसे द्वारा इस लक्ष्य को हासिल करने की कोशिश की:बूटस्ट्रैप फ़ाइल में स्प्रिंग प्रोफाइल को अलग-अलग कैसे सेट करें (स्प्रिंग बूट के लिए विभिन्न क्लाउड कॉन्फ़िगर सर्वर को लक्षित करने के लिए)?

spring.application.name=app-name 
spring.cloud.config.uri=http://default-config-server.com 

--- 
spring.profiles=dev 
spring.cloud.config.uri=http://dev-config-server.com 

--- 
spring.profiles=stage 
spring.cloud.config.uri=http://stage-config-server.com 

--- 
spring.profiles=prod 
spring.cloud.config.uri=http://prod-config-server.com 

और फिर मैं CLA -Dspring.profiles.active=dev सेट लेकिन लोड किया config सर्वर हमेशा फ़ाइल (यानी prod config में पिछले एक सेट है सर्वर उपर्युक्त सेटिंग्स में लोड किया जाएगा, और फिर यदि प्रोड हटा दिया गया है, तो चरण लोड किया जाएगा)।

क्लाउड कॉन्फ़िगर सर्वर के लिए बूटस्ट्रैप प्रोफाइल सेट करना संभव है? मैंने this example का पालन किया लेकिन यह काम नहीं कर रहा है। इसके लायक होने के लिए, ये प्रोफाइल सही कॉन्फ़िगरेशन लोड करने के लिए बहुत अच्छा काम करते हैं (यानी एप-name-dev.properties लोड हो जाएंगे यदि dev प्रोफ़ाइल सक्रिय है), लेकिन उचित कॉन्फ़िगरेशन सर्वर से नहीं खींचा जा रहा है।

+1

यह केवल YAML फ़ाइलें नहीं संपत्ति फ़ाइलों के लिए काम करेंगे (AFAIK)। बस 'बूटस्ट्रैप- [प्रोफाइल] .properties' यानी 'bootstrap-dev.properties' जोड़ें जिसमें आवश्यक (ओवरराइड) कॉन्फ़िगरेशन शामिल होगा। –

+0

@ एम। डीनियम यह सही जवाब है, धन्यवाद! इसे जोड़ें और मैं स्वीकार करूंगा। –

उत्तर

5

एक फ़ाइल में विभिन्न प्रोफाइल निर्दिष्ट करना केवल वाईएएमएल फाइलों के लिए समर्थन है और संपत्ति फ़ाइलों पर लागू नहीं होता है। संपत्ति फ़ाइलों के लिए डिफ़ॉल्ट bootstrap.properties से गुणों को ओवरराइड करने के लिए पर्यावरण विशिष्ट bootstrap-[profile].properties निर्दिष्ट करें।

तो आपके मामले में आपको 4 फाइलें bootstrap.properties, bootstrap-prod.properties, bootstrap-stage.properties और bootstrap-dev.properties मिल जाएगी।

हालांकि इसके बजाय आप केवल डिफ़ॉल्ट bootstrap.properties प्रदान कर सकते हैं और एप्लिकेशन को अपने आवेदन में -Dspring.cloud.config.uri=<desired-uri> पास करके संपत्ति को ओवरराइड कर सकते हैं।

java -jar <your-app>.jar -Dspring.cloud.config.uri=<desired-url> 

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

0
I solved a similar problem with an environment variable in Docker. 

bootstrap.yml

spring: 
    application: 
    name: dummy_service 
    cloud: 
    config: 
     uri: ${CONFIG_SERVER_URL:http://localhost:8888/} 
     enabled: true 
    profiles: 
    active: ${SPR_PROFILE:dev} 

Dockerfile

ENV CONFIG_SERVER_URL="" 
ENV SPR_PROFILE="" 

डोकर-compose.yml

version: '3' 

services: 

    dummy: 
    image: xxx/xxx:latest 
    restart: always 
    environment: 
     - SPR_PROFILE=docker 
     - CONFIG_SERVER_URL=http://configserver:8888/ 
    ports: 
     - 8080:8080 
    depends_on: 
     - postgres 
     - configserver 
     - discovery 
संबंधित मुद्दे