发布时间:2024-01-13 16:30
https://flywaydb.org/
Flyway是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。
用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同 人的sql脚本,从而做到数据库同步。
常用场景:
所有开发人员 在dev环境用migration记录数据库变更,上线时用flyway一键迁移到prod环境
Flyway将对数据库的所有更改都称为:migrations
直观理解为 sql脚本
flyway_schemo_history表,用来记录数据库已经执行过的migration
仅在部署到新环境时,对于已经有数据的数据库,必须先baseline,然后才能migrate;
一遍又一遍地执行相同的操作
Flyway在执行migrations时提供了一些列的hook,使用回调来挂钩其生命周期。
使你可以在执行过程中加入额外的操作.
migration的名称以hook名称开头即可,例如: beforeMigrate.sql
、 beforeEachMigrate.sql
、 beforeRepair__vacuum.sql
对比migration脚本与flyway_schemo_history的记录
校验迁移记录与migration脚本是否匹配
在有数据表 但没flyway_schemo_history的数据库中 设置基线
修复flyway_schemo_history表
删除失败的迁移条目(仅适用于不支持 DDL 事务的数据库)
将应用迁移的校验和、描述和类型与可用迁移重新对齐
将所有丢失的迁移标记为已删除
SQL脚本文件
V1_2__Another_user.sql
java代码实现
通过JDBC来执行SQL。实现 org.flywaydb.core.api.migration.jdbc.JdbcMigratio
接口来创建一个Java migration
package db.migration;
import org.flywaydb.core.api.migration.jdbc.JdbcMigration;
import java.sql.Connection;
import java.sql.PreparedStatement;
/**
* Example of a Java-based migration.
*/
public class V1_2__Another_user implements JdbcMigration {
public void migrate(Connection connection) throws Exception {
PreparedStatement statement = connection.prepareStatement(\"INSERT INTO test_user (name) VALUES (\'Obelix\')\");
try {
statement.execute();
} finally {
statement.close();
}
}
}
官方提供了命令行、API、以及 Maven 和 Gradle 插件的方式
pom引入 Flyway
<dependency>
<groupId>org.flywaydbgroupId>
<artifactId>flyway-coreartifactId>
dependency>
在应用启动时,会在默认路径 classpath:db/migration
查找 sql 脚本自动执行。如果没找到会报错,影响应用启动。
无需其他配置,Flyway 的功能是自动启用的,如果想停用 Flyway,需设置 spring.flyway.enabled=false
启动成功后,可在所指定的数据库中的 flyway_schema_history
表中查看初始化脚本执行状态。
pom引入flyway的插件,同时配置好对应的数据库连接。
<plugin>
<groupId>org.flywaydbgroupId>
<artifactId>flyway-maven-pluginartifactId>
<version>5.2.4version>
<configuration>
<url>jdbc:mysql://localhost:3306/flyway?useUnicode=true&characterEncoding=utf8&serverTimezone=GMTurl>
<user>rootuser>
<password>rootpassword>![enter image description here](/tencent/api/attachments/s3/url?attachmentid=176209)
<driver>com.mysql.cj.jdbc.Driverdriver>
configuration>
plugin>