Flyway là gì?
Flyway là một công cụ migrations-based để quản lý schema của cơ sở dữ liệu. Nó cho phép viết các file SQL hoặc Java để quản lý thay đổi dữ liệu theo version, đảm bảo rằng mọi môi trường đều có cùng cấu trúc DB.
Đặc điểm nổi bật:
- Dễ tích hợp với các dự án Java (hỗ trợ Spring Boot).
- Cấu hình đơn giản, chỉ cần dependency và tạo folder chứa migration.
- Hỗ trợ nhiều loại database: PostgreSQL, MySQL, Oracle, SQL Server,…
- Có thể chạy bằng CLI, Maven, Gradle, hoặc tự động khi ứng dụng khởi động.
Cách hoạt động của Flyway
Flyway hoạt động dựa trên quy ước đặt tên file migration, ví dụ:
V1__create_user_table.sql
V2__add_index_to_email.sql
Khi chạy, Flyway sẽ:
- Tạo bảng
flyway_schema_history
để lưu thông tin migration. - So sánh các file migration hiện tại với những migration đã thực thi.
- Thực thi các file mới theo đúng thứ tự version.
Cài đặt Flyway với Spring Boot
Thêm dependency
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
Tạo folder db/migration
trong resources
-- resources/db/migration/V1__init_schema.sql
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);
Application config
# application.yml
spring:
flyway:
enabled: true
locations: classpath:db/migration
So sánh Flyway và Liquibase
Tiêu chí | Flyway | Liquibase |
---|---|---|
Cách viết migration | SQL hoặc Java | SQL, XML, YAML, JSON |
Khả năng mở rộng | Vừa đủ | Cao (hỗ trợ nhiều format, custom logic) |
Tích hợp CI/CD | Dễ tích hợp | Cần nhiều config hơn |
Lịch sử migration | Tự động qua bảng flyway_schema_history | Qua bảng databasechangelog và changeloglock |
Rollbacks | Không hỗ trợ rollback tự động | Có hỗ trợ rollback |
Quản lý branching | Cơ bản | Mạnh mẽ hơn với changelog contexts |
Kết luận
Flyway là một công cụ tuyệt vời cho việc quản lý migration cơ sở dữ liệu trong các dự án dùng Spring Boot, việc tích hợp Flyway chỉ mất vài phút nhưng mang lại lợi ích lâu dài trong việc duy trì nhất quán schema và kiểm soát thay đổi dữ liệu.
Tham khảo: