Spring Boot 4 Microservices & REST APIs · บทเรียน

การกำหนดค่าภายนอกและการเขียนทับ

เขียนทับการกำหนดค่าผ่านสภาพแวดล้อมและบรรทัดคำสั่ง

บทเรียน 4 จาก 413 ขั้นตอน

การกำหนดค่าภายนอกและการเขียนทับ เป็นบทเรียน Spring Boot 4 Microservices & REST APIs ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Spring Boot 4 Microservices & REST APIs และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Spring Boot 4 Microservices & REST APIs มีบทเรียนทั้งหมด 4 บทเรียน

แนวคิด 12-Factor

หลักการสำคัญของแอปที่พกพาได้คือการเก็บการตั้งค่าไว้ในสภาพแวดล้อม ไม่ใช่ในโค้ด อาร์ติแฟกต์เดียวกันควรทำงานได้ทุกที่ โดยเปลี่ยนพฤติกรรมผ่านการตั้งค่าภายนอกเท่านั้น

Spring Boot ยึดแนวทางนี้: ไฟล์ jar เดียวอ่านค่าจากแหล่งต่าง ๆ และผสานค่าตามลำดับความสำคัญที่กำหนดไว้อย่างชัดเจน

หลายแหล่ง หนึ่ง Environment

Boot รวบรวมการตั้งค่าจากแหล่งคุณสมบัติจำนวนมาก — ไฟล์ ตัวแปรสภาพแวดล้อม อาร์กิวเมนต์บรรทัดคำสั่ง และอื่น ๆ — เข้าไว้ใน Environment เดียวที่เป็นหนึ่งเดียว

  • แต่ละแหล่งมีส่วนเพิ่มคู่คีย์/ค่า
  • แหล่งที่มีลำดับความสำคัญสูงกว่าจะชนะเมื่อเกิดความขัดแย้ง
  • โค้ดของคุณไม่จำเป็นต้องรู้หรือสนใจว่าค่านั้นมาจากที่ใด

ลำดับความสำคัญ (สูงไปต่ำ)

เมื่อคีย์เดียวกันปรากฏในหลายแหล่ง แหล่งที่มีลำดับความสำคัญสูงสุดจะเป็นฝ่ายชนะ ลำดับแบบย่อที่ใช้กันทั่วไปมีดังนี้:

  • อาร์กิวเมนต์บรรทัดคำสั่ง
  • ตัวแปรสภาพแวดล้อมของ OS
  • ไฟล์ application-{profile} เฉพาะโปรไฟล์
  • ไฟล์ application พื้นฐาน
  • ค่าเริ่มต้นในโค้ด / ค่าสำรองของ @Value

นี่คือเหตุผลที่แฟล็ก CLI สามารถแทนที่ทุกสิ่งที่ฝังอยู่ในไฟล์ jar ได้

การแทนที่ด้วยอาร์กิวเมนต์บรรทัดคำสั่ง

ส่ง --key=value ต่อท้ายไฟล์ jar ค่าเหล่านี้มีลำดับความสำคัญสูงมาก และเหมาะสำหรับการแทนที่แบบครั้งเดียวหรือจุดเริ่มต้นของคอนเทนเนอร์

java -jar app.jar \
  --server.port=9090 \
  --spring.profiles.active=prod \
  --app.mail.host=smtp.prod.example.com

การแทนที่ด้วยตัวแปรสภาพแวดล้อม

ตัวแปรสภาพแวดล้อมใช้ชื่อคุณสมบัติในรูปแบบ UPPER_SNAKE_CASE โดยจุดและขีดกลางจะเปลี่ยนเป็นขีดล่าง นี่เป็นวิธีมาตรฐานสำหรับฉีดการตั้งค่าในคอนเทนเนอร์

# property: app.mail.host
export APP_MAIL_HOST=smtp.prod.example.com

# property: server.port
export SERVER_PORT=9090

# property: spring.datasource.password
export SPRING_DATASOURCE_PASSWORD=s3cret

การผูกตัวแปรสภาพแวดล้อมแบบยืดหยุ่น

เนื่องจากชื่อของตัวแปรสภาพแวดล้อมมีข้อจำกัด Spring จึงจับคู่ชื่อเหล่านั้นกลับเป็นชื่อคุณสมบัติมาตรฐาน APP_MAIL_MAX_RETRIES จะจับคู่กับ app.mail.maxRetries ทำให้คุณกำหนดคุณสมบัติใด ๆ จากสภาพแวดล้อมได้

การฉีดข้อมูลลับขณะนำไปใช้งาน

อย่าเก็บข้อมูลลับไว้ในไฟล์ jar ให้ใช้อ้างอิงด้วยตัวแทนค่า และให้แพลตฟอร์มส่งค่าจริงผ่านตัวแปรสภาพแวดล้อม ไฟล์ที่提交ไว้ควรมีเพียงค่าเริ่มต้นที่ปลอดภัย หรือไม่มีค่าเริ่มต้นเลย

spring:
  datasource:
    url: ${DB_URL}
    username: ${DB_USER:app}
    password: ${DB_PASSWORD}

ไฟล์การตั้งค่าภายนอก

ชี้ให้ Boot ใช้การตั้งค่าภายนอกไฟล์ jar ด้วย spring.config.location หรือเพิ่มไฟล์อื่นด้วย spring.config.additional-location ผู้ดูแลระบบสามารถวางไฟล์ไว้ข้างการติดตั้งได้โดยไม่ต้องสร้างใหม่

java -jar app.jar \
  --spring.config.additional-location=file:/etc/myapp/

การนำเข้าการตั้งค่า

Boot รุ่นใหม่รองรับ spring.config.import เพื่อดึงเอกสารเพิ่มเติม ไฟล์ที่เป็นตัวเลือก หรือแม้แต่รายการจากเซิร์ฟเวอร์การตั้งค่าเข้ามา โดยผสานตามกฎลำดับความสำคัญปกติ

spring:
  config:
    import:
      - optional:file:/etc/myapp/override.yml
      - configserver:

ค่าแบบสุ่ม

แหล่งคุณสมบัติ random จะสร้างค่าตามต้องการ — มีประโยชน์สำหรับข้อมูล test หรือตัวระบุชั่วคราว แต่ไม่เหมาะสำหรับข้อมูลลับที่ต้องคงที่

app:
  instance-id: ${random.uuid}
  jitter-ms: ${random.int(0,500)}

การแก้ไขข้อผิดพลาดว่าค่ามาจากที่ใด

เมื่อค่าไม่เป็นไปตามที่คาดไว้ ให้ตรวจสอบ Environment ที่ผสานแล้ว จุดปลายทาง /env ของ actuator จะแสดงแหล่งคุณสมบัติทุกแหล่งและค่าที่ชนะ ทำให้วิเคราะห์ปัญหาลำดับความสำคัญได้ง่าย

# requires spring-boot-starter-actuator + exposure
GET /actuator/env/server.port

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจของคุณเกี่ยวกับลำดับความสำคัญ

สรุปทบทวน

การแยกการตั้งค่าออกจากโค้ดทำให้อาร์ติแฟกต์เดียวทำงานได้ทุกที่

  • หลายแหล่งถูกรวมเป็น Environment เดียวตามลำดับความสำคัญ
  • อาร์กิวเมนต์ CLI > ตัวแปรสภาพแวดล้อม > ไฟล์โปรไฟล์ > ไฟล์พื้นฐาน > ค่าเริ่มต้นในโค้ด
  • ตัวแปรสภาพแวดล้อมใช้การผูกแบบยืดหยุ่นในรูปแบบ UPPER_SNAKE_CASE
  • ฉีดข้อมูลลับผ่านตัวแทนค่าขณะนำไปใช้งาน
  • ใช้ /actuator/env เพื่อแก้ไขข้อผิดพลาดว่าค่ามาจากที่ใด
เริ่มต้นได้ฟรี

เรียนรู้ Java ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
24
บทเรียน
93

คำถามที่พบบ่อย

บทเรียน “การกำหนดค่าภายนอกและการเขียนทับ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การกำหนดค่าภายนอกและการเขียนทับ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Spring Boot 4 Microservices & REST APIs ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Spring Boot 4 Microservices & REST APIs มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดค่าภายนอกและการเขียนทับ”

เขียนทับการกำหนดค่าผ่านสภาพแวดล้อมและบรรทัดคำสั่ง คุณปฏิบัติ Spring Boot 4 Microservices & REST APIs ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Spring Boot 4 Microservices & REST APIs หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Spring Boot 4 Microservices & REST APIs บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การกำหนดค่าภายนอกและการเขียนทับ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Spring Boot 4 Microservices & REST APIs นี้ได้ไหม

ได้ บทเรียน Spring Boot 4 Microservices & REST APIs ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. application.properties และ YAML
  2. โปรไฟล์สำหรับสภาพแวดล้อม
  3. การกำหนดค่าแบบตรวจสอบชนิดด้วย @ConfigurationProperties
  4. การกำหนดค่าภายนอกและการเขียนทับ
← กลับไปที่ Spring Boot 4 Microservices & REST APIs