application.properties คือ ไฟล์สำหรับตั้งค่า ของโปรเจกต์ Spring Boot ครับ ในโลกของ Java Spring Boot ไฟล์นี้เปรียบเสมือน “ศูนย์บัญชาการ” ที่บอกให้แอปพลิเคชันรู้ว่าจะต้องทำงานอย่างไร เชื่อมต่อกับอะไร และใช้ค่ากำหนดไหนบ้าง
มี 2 ไฟล์
แม้จะเป็นไฟล์ชื่อเดียวกัน แต่มีหน้าที่ในวงจรการทำงาน ต่างกันครับ
- /src/main/resources/application.properties
- หน้าที่: เป็นไฟล์ต้นฉบับที่คุณเขียน code
- การแก้ไข: คุณควรแก้ไขที่ไฟล์นี้เสมอ
- /target/classes/application.properties
- หน้าที่: เป็นไฟล์ที่ถูก Build ออกมาแล้ว เตรียมนำไปรัน
- คำเตือน: อย่าแก้ไขไฟล์ในโฟลเดอร์
targetเพราะทุกครั้งที่คุณสั่งmvn cleanหรือสั่ง Build ใหม่ ไฟล์ในนี้จะถูกลบและเขียนทับด้วยไฟล์จากsrcเสมอ
ทำไมต้องมีไฟล์นี้ ?
แทนที่เราจะเขียน Username, Password หรือ Port ไว้ในตัว Code ซึ่งอันตรายและแก้ไขยาก เราจะเอามาวางไว้ในไฟล์นี้แทน เพื่อความสะดวกในด้านต่าง ๆ
- การเชื่อมต่อ Database: อย่างที่คุณตั้งค่า SQL Server ไว้
- การกำหนด Port: เช่น
server.port=8081 - การจัดการ 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 ด้วย ซึ่งจะอ่านง่ายกว่าในกรณีที่มีการตั้งค่าซับซ้อนครับ
/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 จะใช้การย่อหน้า เป็นตัวกำหนดโครงสร้าง ห้ามลืมเว้นวรรคหลังเครื่องหมาย
:เช่นport: 8080 - หากคุณมีการใช้ Profile แยกตามสภาพแวดล้อม คุณสามารถใช้ชื่อไฟล์อย่าง
application-dev.ymlในโฟลเดอร์เดียวกันนี้ได้เลยครับ - การ Clean Project: หลังจากเปลี่ยนไฟล์แล้ว แนะนำให้รันคำสั่งด้านล่างเพื่อให้ Build Tool เคลียร์ไฟล์เก่าในโฟลเดอร์
targetหรือbuildออกก่อนครับ- Maven:
./mvnw clean - Gradle:
./gradlew clean
- Maven:
อ่านเพิ่มเติม