PlusMagi's Blog By Pitt Phunsanit Spring Boot Spring Boot: application.properties

Spring Boot: application.properties

application.properties คือ ไฟล์สำหรับตั้งค่า ( Configuration File ) ของโปรเจกต์ Spring Boot ครับ ในโลกของ Java Spring Boot ไฟล์นี้เปรียบเสมือน “ศูนย์บัญชาการ” ที่บอกให้แอปพลิเคชันรู้ว่าจะต้องทำงานอย่างไร เชื่อมต่อกับอะไร และใช้ค่ากำหนดไหนบ้าง


มี 2 ไฟล์

แม้จะเป็นไฟล์ชื่อเดียวกัน แต่มีหน้าที่ในวงจรการทำงาน ( Lifecycle ) ต่างกันครับ

  • /src/main/resources/application.properties
    • หน้าที่: เป็นไฟล์ต้นฉบับที่คุณเขียน code ( Source Code )
    • การแก้ไข: คุณควรแก้ไขที่ไฟล์นี้เสมอ
  • /target/classes/application.properties
    • หน้าที่: เป็นไฟล์ที่ถูก Build ( Compile ) ออกมาแล้ว เตรียมนำไปรัน
    • คำเตือน: อย่าแก้ไขไฟล์ในโฟลเดอร์ target เพราะทุกครั้งที่คุณสั่ง mvn clean หรือสั่ง Build ใหม่ ไฟล์ในนี้จะถูกลบและเขียนทับด้วยไฟล์จาก src เสมอ

ทำไมต้องมีไฟล์นี้ ?

แทนที่เราจะเขียน Username, Password หรือ Port ไว้ในตัว Code ( Hardcode ) ซึ่งอันตรายและแก้ไขยาก เราจะเอามาวางไว้ในไฟล์นี้แทน เพื่อความสะดวกในด้านต่าง ๆ

  • การเชื่อมต่อ Database: อย่างที่คุณตั้งค่า SQL Server ไว้ ( URL, Username, Password )
  • การกำหนด Port: เช่น server.port=8081 ( ถ้าไม่กำหนดจะเป็น 8080 )
  • การจัดการ Log: กำหนดระดับความละเอียดในการแสดง Error
  • การแยก Environment: คุณสามารถสร้าง application-dev.properties สำหรับพัฒนา และ application-prod.properties สำหรับใช้งานจริงได้

ตัวอย่างการใช้งาน


application.properties

คุณควรนำค่าจาก Docker Compose มาใส่ในไฟล์ที่อยู่ใน src/main/resources/ ดังนี้
/src/main/resources/application.properties

# ตั้งค่า Server Port
server.port=8080

# ตั้งค่าการเชื่อมต่อ SQL Server (Docker)
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=master;encrypt=true;trustServerCertificate=true
spring.datasource.username=sa
spring.datasource.password=4w2e36jqg6mG

# ตั้งค่า Hibernate ให้สร้าง Table อัตโนมัติ
spring.jpa.hibernate.ddl-auto=update

application.yml

นอกนามสกุลไฟล์นอกจาก .properties แล้ว Spring Boot ยังนิยมใช้แบบ .yml ( YAML ) ด้วย ซึ่งจะอ่านง่ายกว่าในกรณีที่มีการตั้งค่าซับซ้อนครับ

/src/main/resources/application.yml

server:
  port: 8080

spring:
  datasource:
    url: jdbc:sqlserver://localhost:1433;databaseName=master;encrypt=true;trustServerCertificate=true
    username: sa
    password: 4w2e36jqg6mG
  
  jpa:
    hibernate:
      ddl-auto: update

สิ่งที่ควรทราบเมื่อเปลี่ยนจาก .properties เป็น .yml:

  1. ลบไฟล์เก่าออก: แนะนำให้ลบ application.properties ทิ้งไปเลย เพื่อป้องกันความสับสน เพราะหากมีทั้งสองไฟล์ Spring Boot มักจะเลือกอ่าน .properties ก่อน ( ขึ้นอยู่กับเวอร์ชัน ) ซึ่งอาจทำให้ค่าที่แก้ใน YAML ไม่ถูกนำไปใช้ครับ
  2. Format ตรวจสอบช่องว่าง: YAML จะใช้การย่อหน้า ( Indentation ) เป็นตัวกำหนดโครงสร้าง ห้ามลืมเว้นวรรคหลังเครื่องหมาย : เช่น port: 8080 ( ถ้าเขียน port:8080 จะ error ทันที )
  3. หากคุณมีการใช้ Profile แยกตามสภาพแวดล้อม ( เช่น dev, prod ) คุณสามารถใช้ชื่อไฟล์อย่าง application-dev.yml ในโฟลเดอร์เดียวกันนี้ได้เลยครับ
  4. การ Clean Project: หลังจากเปลี่ยนไฟล์แล้ว แนะนำให้รันคำสั่งด้านล่างเพื่อให้ Build Tool เคลียร์ไฟล์เก่าในโฟลเดอร์ target หรือ build ออกก่อนครับ
    • Maven: ./mvnw clean
    • Gradle: ./gradlew clean

อ่านเพิ่มเติม