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
- 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
- Bảng metadata: Tạo bảng
flyway_schema_historyđể lưu lịch sử thực thi - Quét tập lệnh: Duyệt các tệp SQL tại thư mục
src/main/resources/db/migration - 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
- 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-disabledtrong 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ỳ