0Pricing
Java Academy · บทเรียน

คุณสมบัติแอปพลิเคชันและโปรไฟล์

แยกการกำหนดค่าออกมาไว้ภายนอกด้วย application.properties/yml กำหนดโปรไฟล์ และฉีดค่าด้วย @Value และ @ConfigurationProperties

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

application.properties เทียบกับ application.yml

Spring Boot จะอ่านการกำหนดค่าจาก src/main/resources/application.properties หรือ application.yml YAML รองรับการกำหนดค่าแบบลำดับชั้นโดยไม่ต้องเขียนคีย์ซ้ำ ทั้งสองรูปแบบมีความสามารถเทียบเท่ากัน

# application.properties:
server.port=8080
spring.datasource.url=jdbc:postgresql://localhost/mydb
spring.jpa.hibernate.ddl-auto=validate

# Equivalent application.yml:
server:
  port: 8080
spring:
  datasource:
    url: jdbc:postgresql://localhost/mydb
  jpa:
    hibernate:
      ddl-auto: validate

การฉีดค่าด้วย @Value

ใช้ @Value("${property.key}") เพื่อฉีดพร็อพเพอร์ตีเพียงรายการเดียว เพิ่มค่าเริ่มต้นด้วย ${key:default} และรองรับนิพจน์ SpEL

@Service
public class PricingService {
    @Value("${pricing.vat-rate:0.20}")
    private double vatRate;
    @Value("${app.name}")
    private String appName;
}

@ConfigurationProperties สำหรับการผูกค่าที่ปลอดภัยด้านชนิดข้อมูล

ผูกพร็อพเพอร์ตีที่เกี่ยวข้องกันเป็นกลุ่มเข้ากับเรคคอร์ดหรือคลาสของ Java ที่มีแอนโนเทชัน @ConfigurationProperties และรองรับแอนโนเทชันสำหรับตรวจสอบความถูกต้อง

@ConfigurationProperties(prefix = "app.mail")
public record MailProperties(
    @NotBlank String host,
    @Min(1) @Max(65535) int port,
    boolean ssl
) {}
// Bind in Spring Boot 3: @EnableConfigurationProperties(MailProperties.class)

โปรไฟล์: การกำหนดสภาพแวดล้อม

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

# application-dev.properties (active when profile=dev):
spring.datasource.url=jdbc:h2:mem:testdb
logging.level.com.example=DEBUG

# application-prod.properties (active when profile=prod):
spring.datasource.url=jdbc:postgresql://prod-db/app
logging.level.com.example=WARN

การเปิดใช้งานโปรไฟล์

เปิดใช้งานโปรไฟล์ผ่าน application.properties ตัวแปรสภาพแวดล้อม คุณสมบัติระบบ หรือ SPRING_PROFILES_ACTIVE ของ Spring Boot

# application.properties:
spring.profiles.active=dev
# Or environment variable:
export SPRING_PROFILES_ACTIVE=prod
# Or JVM argument:
java -Dspring.profiles.active=prod -jar app.jar

@Profile บนบีน

ใส่แอนโนเทชัน @Bean หรือ @Component ด้วย @Profile("prod") เพื่อลงทะเบียนบีนนั้นเฉพาะเมื่อโปรไฟล์ที่ตรงกันเปิดใช้งานอยู่

@Configuration
public class DataSourceConfig {
    @Bean @Profile("dev")
    public DataSource h2DataSource() { return new EmbeddedDatabaseBuilder().build(); }
    @Bean @Profile("prod")
    public DataSource postgresDataSource() { return DataSourceBuilder.create().url(prodUrl).build(); }
}

กลุ่มโปรไฟล์ (Spring Boot 2.4+)

จัดกลุ่มโปรไฟล์หลายรายการไว้ภายใต้ชื่อเดียวกัน เมื่อเปิดใช้งานกลุ่ม ระบบจะเปิดใช้งานโปรไฟล์ทั้งหมดในกลุ่มพร้อมกัน

# application.properties:
spring.profiles.group.production=prod,metrics,cloud

การกำหนดค่าภายนอกด้วยตัวแปรสภาพแวดล้อม

Spring Boot จะแมปตัวแปรสภาพแวดล้อมกับพร็อพเพอร์ตีโดยอัตโนมัติ DB_HOST จะแมปกับ db.host (การผูกค่าแบบยืดหยุ่น) เหมาะอย่างยิ่งสำหรับการติดตั้งใช้งานด้วย Docker และ Kubernetes

# application.properties:
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASS}

ลำดับความสำคัญในการเขียนทับพร็อพเพอร์ตี

พร็อพเพอร์ตีจะถูกนำไปใช้ตามลำดับความสำคัญดังนี้: อาร์กิวเมนต์บรรทัดคำสั่ง > ตัวแปรสภาพแวดล้อม > ไฟล์เฉพาะโปรไฟล์ > application.properties > ค่าเริ่มต้น แหล่งที่มีลำดับความสำคัญสูงกว่าจะเขียนทับแหล่งที่มีลำดับความสำคัญต่ำกว่า

การเข้ารหัสพร็อพเพอร์ตีที่ละเอียดอ่อนด้วย Jasypt

ค่าที่ละเอียดอ่อน เช่น รหัสผ่าน สามารถเข้ารหัสด้วย Jasypt Spring Boot ได้ ให้จัดเก็บค่าที่เข้ารหัสไว้ในพร็อพเพอร์ตี โดย Jasypt จะถอดรหัสเมื่อเริ่มต้นระบบโดยใช้คีย์หลักที่ส่งผ่านอาร์กิวเมนต์ของ JVM

# application.properties:
spring.datasource.password=ENC(k9r/2dfhXPQz+2jR8yzUYw==)
# JVM arg:
java -Djasypt.encryptor.password=masterSecret -jar app.jar

ไฟล์ YAML หลายเอกสาร

ไฟล์ YAML รองรับเอกสารหลายชุดที่คั่นด้วย --- ให้ใช้ spring.config.activate.on-profile ภายในเอกสารแต่ละชุดเพื่อกำหนดค่าตามโปรไฟล์ไว้ในไฟล์เดียว

server:
  port: 8080
---
spring:
  config:
    activate:
      on-profile: prod
server:
  port: 443

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

คำอธิบายประกอบใดที่ใช้ผูกกลุ่มพร็อพเพอร์ตีที่เกี่ยวข้องเข้ากับคลาส Java โดยมีความปลอดภัยด้านชนิดข้อมูล

ทบทวน

ใช้ application.properties / application.yml สำหรับการกำหนดค่า ใช้ @Value สำหรับค่าเดี่ยว และใช้ @ConfigurationProperties สำหรับกลุ่มค่า โปรไฟล์ช่วยแยกสภาพแวดล้อมออกจากกัน ตัวแปรสภาพแวดล้อมจะเขียนทับพร็อพเพอร์ตี ซึ่งเป็นสิ่งจำเป็นสำหรับคอนเทนเนอร์

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

บทเรียน “คุณสมบัติแอปพลิเคชันและโปรไฟล์” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “คุณสมบัติแอปพลิเคชันและโปรไฟล์”

แยกการกำหนดค่าออกมาไว้ภายนอกด้วย application.properties/yml กำหนดโปรไฟล์ และฉีดค่าด้วย @Value และ @ConfigurationProperties คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่

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

บทเรียน “คุณสมบัติแอปพลิเคชันและโปรไฟล์” ใช้เวลานานแค่ไหน

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

ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม

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

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

  1. การกำหนดค่าอัตโนมัติและตัวเริ่มต้น Spring Boot
  2. คุณสมบัติแอปพลิเคชันและโปรไฟล์
  3. การเชื่อมโยง Bean: @Component, @Service, @Repository
  4. การฉีดผ่านคอนสตรักเตอร์และดีเพนเดนซีแบบวนรอบ
← กลับไปที่ Java Academy