Sử dụng Flyway để kiểm soát phiên bản cơ sở dữ liệu

Giới thiệu về Flyway

Flyway là công cụ kiểm soát phiên bản cơ sở dữ liệu phổ biến nhất trong hệ sinh thái Java. Nếu Git được ví như công cụ quản lý phiên bản mã nguồn thì Flyway chính là "Git dành cho cơ sở dữ liệu". Công cụ này đảm bảo tính nhất quán giữa cấu trúc cơ sở dữ liệu (Schema) và phiên bản mã ứng dụng thông qua việc thực thi các tập lệnh SQL theo thứ tự xác định.

Nguyên lý hoạt động

  1. Kiểm tra khởi tạo: Khi ứng dụng khởi động, Flyway kiểm tra kết nối cơ sở dữ liệu
  2. Bảng metadata: Tạo bảng flyway_schema_history để lưu lịch sử thực thi
  3. Quét tập lệnh: Duyệt các tệp SQL tại thư mục src/main/resources/db/migration
  4. So sánh và thực thi:
    • So sánh phiên bản tập lệnh với lịch sử
    • Thực thi các tập lệnh chưa chạy theo thứ tự tăng dần
  5. Ghi nhận kết quả: Ghi thông tin thực thi vào bảng metadata

Tích hợp với Spring Boot (Tiêu chuẩn 2026)

1. Cấu hình Maven


<dependencies>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>


<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>


<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
</dependencies>

2. Cấu hình application.yml


spring:
datasource:
url: jdbc:mysql://localhost:3306/my_db
username: root
password: password
flyway:
enabled: true
locations: classpath:db/migration
table: flyway_schema_history
encoding: UTF-8
validate-on-migrate: true
baseline-on-migrate: false

3. Quy tắc đặt tên tập lệnh

  • V1__create_user_table.sql (Cố định)
  • R__refresh_view.sql (Lặp lại)

4. Ví dụ tập lệnh SQL


-- V1__create_user_table.sql
CREATE TABLE nguoi_dung (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
ten VARCHAR(50) NOT NULL
) ENGINE=InnoDB;

-- V1.1__add_email.sql
ALTER TABLE nguoi_dung ADD COLUMN email VARCHAR(100);

Kỹ thuật nâng cao

  • Baseline: Khởi tạo phiên bản cơ sở cho dự án đã có cơ sở dữ liệu
  • Migrations lặp lại: Sử dụng cho view/stored procedure
  • Thay thế biến: CREATE TABLE ${prefix}_users
  • Migrations bằng Java: Triển khai interface JavaMigration

So sánh Flyway vs Liquibase

Tính năng Flyway Liquibase
Định dạng SQL thuần XML/YAML/JSON
Khả năng hồi tác Yêu cầu viết SQL thủ công Hỗ trợ tự động qua thẻ rollback
Tính năng đa nền tảng Tối ưu theo DBMS Khả năng tương thích cao

Lưu ý quan trọng

  • Kích hoạt clean-disabled trong môi trường sản phẩm
  • Không sửa đổi tập lệnh đã thực thi
  • Kiểm tra checksum định kỳ

Thẻ: flyway spring-boot database-migration sql version-control

Đăng vào ngày 4 tháng 6 lúc 21:33