application.yml รองรับตัวแปรสภาพแวดล้อมหรือไม่


111

ฉันลองใช้ตัวแปร env ในการกำหนดค่า application.yml ของฉันเช่น:

spring:
  main:
    show_banner: false

---

spring:
  profiles: production
server:
  address: $OPENSHIFT_DIY_IP
  port: $OPENSHIFT_DIY_PORT

แต่ตัวแปร env ไม่ได้รับการแก้ไข ฉันต้องระบุสัญกรณ์อื่นหรือไม่?

ใน Rails คุณสามารถใช้ <% = ENV ['FOOVAR']%> ได้

ทางเลือกเดียวคือเรียกใช้แอปเช่น:

java -jar my.jar --server.address=$OPENSHIFT_DIY_IP --server.port=$OPENSHIFT_DIY_PORT

คำตอบ:


147

ลอง${OPENSHIFT_DIY_PORT}(สัญกรณ์ตัวยึดตำแหน่ง Spring ตามปกติ) ดูเอกสารได้ที่นี่


นี่คือสิ่งที่ฉันต้องการ:app.name=MyApp app.description=${app.name} is a Spring Boot application
jurassix

2
เพียงเพื่อชี้ให้เห็น - หากคุณใช้ kotlin คุณต้องใส่ข้อมูลอ้างอิงของคุณในเครื่องหมายคำพูดและหลีกเลี่ยง$เช่นroot: "\${LOGGING_LEVEL_ROOT:info}"
Edward

พวกเราจะไปส่ง OPENSHIFT_DIY_PORT ผ่าน unix cli ได้อย่างไรเมื่อเริ่มแอปพลิเคชัน ฉันรู้ว่าเราสามารถใช้ -D เพื่อส่งผ่านพารามิเตอร์แทนที่ได้ แต่มันใช้ได้กับตัวแปร env ด้วยหรือไม่ เช่น nohup java -Xmx1024m -jar -Dspring.profiles.active = "อะไรก็ได้" มีวิธีทำกับ env vars หรือไม่?
Igor Donin

@IgorDonin การเชื่อมต่อการกำหนดตัวแปรและโปรแกรมจะเรียกตัวเลือกสำหรับคุณหรือไม่? จ.:$MY_ENV=value && java -jar ...
PAX

86

คุณสามารถเพิ่มค่าเริ่มต้นได้หากไม่ได้ระบุตัวแปรสภาพแวดล้อม:

logging:
  level:
    root: ${LOGGING_LEVEL_ROOT:info}

5
ฉันพบไวยากรณ์นี้ในแอปที่ฉันสืบทอดมาและไม่พบเอกสาร Spring ที่แสดงสิ่งนี้ มันค่อนข้างชัดเจนว่ากำลังเกิดอะไรขึ้น แต่ถ้าจะหาเอกสารให้ได้ก็คงจะดี ขอบคุณสำหรับการแบ่งปัน - ตอนนี้ฉันมั่นใจมากขึ้นกับข้อสรุปของฉัน
สาธุ

กำลังใช้ค่าเริ่มต้นในการกำหนดค่า UB หรือระบุไว้อย่างชัดเจนว่าเป็นไปได้หรือไม่
anddero
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.