การกำหนดค่าภายนอกและการเขียนทับ
เขียนทับการกำหนดค่าผ่านสภาพแวดล้อมและบรรทัดคำสั่ง
การกำหนดค่าภายนอกและการเขียนทับ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- application.properties และ YAML
- โปรไฟล์สำหรับสภาพแวดล้อม
- การกำหนดค่าแบบตรวจสอบชนิดด้วย @ConfigurationProperties
- การกำหนดค่าภายนอกและการเขียนทับ