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