ป้ายกำกับ: Request-response

Spring Boot: Migrate โดย FlywaySpring Boot: Migrate โดย Flyway

ในโลกของการพัฒนาแอปพลิเคชันสมัยใหม่ การจัดการโครงสร้างฐานข้อมูล (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

  1. Version Control: ทุกการเปลี่ยนแปลง Schema จะถูกบันทึกเป็นไฟล์ SQL ที่มีเวอร์ชันชัดเจน ทำให้สามารถย้อนกลับหรือตรวจสอบได้เสมอ
  2. Consistency: รับประกันว่า Database Schema ในทุกสภาพแวดล้อมจะอยู่ในเวอร์ชันที่กำหนดอย่างแม่นยำ
  3. Teamwork: สมาชิกในทีมเพียงแค่ Commit โค้ดและไฟล์ Migration เข้าไป ระบบ Spring Boot จะจัดการรัน Migration ให้โดยอัตโนมัติ

✅ บทสรุป

การผสานรวม Flyway เข้ากับ Spring Boot และ PostgreSQL ไม่เพียงแต่ช่วยลดความซับซ้อนในการจัดการ Schema เท่านั้น แต่ยังยกระดับความน่าเชื่อถือของกระบวนการ Deploy ของคุณได้อย่างมาก ทำให้คุณสามารถโฟกัสกับการพัฒนา Business Logic ได้อย่างเต็มที่ โดยไม่ต้องกังวลเรื่องความผิดพลาดของโครงสร้างฐานข้อมูลอีกต่อไป