ในโลกของการพัฒนาแอปพลิเคชันสมัยใหม่ การจัดการโครงสร้างฐานข้อมูล (Database Schema) ให้สอดคล้องกับการเปลี่ยนแปลงของโค้ดเป็นหัวใจสำคัญของการทำ CI/CD การใช้เครื่องมือ Migration ที่เชื่อถือได้จึงเป็นสิ่งจำเป็น Flyway คือเครื่องมือที่ได้รับความนิยมอย่างสูงในการจัดการเวอร์ชันของฐานข้อมูล โดยเฉพาะเมื่อทำงานร่วมกับ Spring Boot และระบบ PostgreSQL
บทความนี้จะพาคุณไปดูขั้นตอนการตั้งค่า Spring Boot เพื่อใช้ Flyway ในการจัดการ Migration ของ PostgreSQL อย่างเป็นระบบ ทำให้มั่นใจได้ว่าทุกสภาพแวดล้อม (Development, Staging, Production) จะมีโครงสร้างฐานข้อมูลที่ถูกต้องและเป็นเวอร์ชันเดียวกันเสมอ
⚙️ ขั้นตอนที่ 1: เพิ่ม Dependencies ใน pom.xml
คุณต้องเพิ่ม Dependency หลักสำหรับ Flyway และ Driver ของ PostgreSQL เข้าไปในไฟล์ `pom.xml` ของโปรเจกต์ Maven ของคุณ:
XML
<dependencies>
<!-- Flyway Core Dependency -->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>a.aaa;aaaa</version>
</dependency>
<!-- PostgreSQL Driver -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
🚀 ขั้นตอนที่ 2: กำหนดค่าการเชื่อมต่อและเปิดใช้งาน Flyway
ในไฟล์ `src/main/resources/application.properties` คุณต้องกำหนดค่าการเชื่อมต่อฐานข้อมูล PostgreSQL และสั่งให้ Spring Boot ใช้ Flyway แทนการสร้างตารางอัตโนมัติของ Hibernate
การตั้งค่า Properties
เพิ่มหรือแก้ไขค่าต่อไปนี้:
Plain Text
# 1. ข้อมูลการเชื่อมต่อ PostgreSQL (ปรับตาม Environment ของคุณ)
spring.datasource.url=jdbc:postgresql://localhost:5432/your_database_name
spring.datasource.username=postgres
spring.datasource.password=your_password
# 2. ปิดการทำงานของ Hibernate DDL-Auto เพื่อให้ Flyway เป็นผู้ควบคุม Schema อย่างเดียว
spring.jpa.hibernate.ddl-auto=none
# 3. เปิดใช้งาน Flyway และตั้งค่าให้รัน baseline เมื่อ Migrate ครั้งแรก
spring.flyway.enabled=true
spring.flyway.baseline-on-migrate=true
📜 ขั้นตอนที่ 3: สร้าง Script Migration (PostgreSQL Syntax)
Flyway จะค้นหาไฟล์ SQL ในโฟลเดอร์ `src/main/resources/db/migration/` โดยไฟล์จะต้องมีรูปแบบการตั้งชื่อที่ระบุเวอร์ชัน (Version) และลำดับ (Up) เสมอ เช่น `V1.0.0__create_initial_schema.sql`
นี่คือตัวอย่างไฟล์ `V1.0.0__create_initial_schema.sql` สำหรับ PostgreSQL:
SQL
-- สร้างตาราง users โดยใช้ PostgreSQL Data Types
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(100) UNIQUE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
-- สร้างตาราง products
CREATE TABLE products (
product_id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price NUMERIC(10, 2) NOT NULL,
stock_quantity INTEGER DEFAULT 0
);
✨ ข้อดีของการใช้ Flyway ในการทำ Migration
- Version Control: ทุกการเปลี่ยนแปลง Schema จะถูกบันทึกเป็นไฟล์ SQL ที่มีเวอร์ชันชัดเจน ทำให้สามารถย้อนกลับหรือตรวจสอบได้เสมอ
- Consistency: รับประกันว่า Database Schema ในทุกสภาพแวดล้อมจะอยู่ในเวอร์ชันที่กำหนดอย่างแม่นยำ
- Teamwork: สมาชิกในทีมเพียงแค่ Commit โค้ดและไฟล์ Migration เข้าไป ระบบ Spring Boot จะจัดการรัน Migration ให้โดยอัตโนมัติ
✅ บทสรุป
การผสานรวม Flyway เข้ากับ Spring Boot และ PostgreSQL ไม่เพียงแต่ช่วยลดความซับซ้อนในการจัดการ Schema เท่านั้น แต่ยังยกระดับความน่าเชื่อถือของกระบวนการ Deploy ของคุณได้อย่างมาก ทำให้คุณสามารถโฟกัสกับการพัฒนา Business Logic ได้อย่างเต็มที่ โดยไม่ต้องกังวลเรื่องความผิดพลาดของโครงสร้างฐานข้อมูลอีกต่อไป