官网:https://flywaydb.org/documentation/
Github: https://github.com/flyway/flyway
首先,让我们从头开始,假设我们有一个名为Shiny的项目,其主要可交付成果是一个名为Shiny Soft的软件,它连接到名为Shiny DB的数据库。
表示这一点的最简单图表可能如下所示:
我们有我们的软件和我们的数据库。伟大的。这很可能就是您所需要的。
但在大多数项目中,这种简单的世界观很快就会转化为:
我们现在不仅要处理我们环境的一个副本,而且还要处理几个。这带来了许多挑战。
我们一直很擅长在代码方面解决它们。
但是数据库呢?
不幸的是,我们在那里做得并不好。许多项目仍然依赖于手动应用的 sql 脚本。有时甚至没有(这里或那里的快速 sql 语句来解决问题)。很快就会出现许多问题:
这些问题的答案往往是:我们不知道。
数据库迁移是重新控制这一混乱局面的好方法。
它们允许您:
最简单的情况是当您将Flyway指向一个空数据库时。
它将尝试定位其模式历史表。由于数据库是空的,Flyway 不会找到它,而是会 创建它。
您现在有一个默认情况下包含一个名为flyway_schema_history 的空表的数据库:
该表将用于跟踪数据库的状态。
紧接着 Flyway 将开始扫描文件系统或应用程序的类路径以进行迁移。它们可以用 Sql 或 Java 编写。
然后根据版本号对迁移进行排序并按顺序应用:
随着每次迁移的应用,架构历史表会相应地更新:
有了元数据和初始状态,我们现在可以讨论迁移到更新版本。
Flyway 将再次扫描文件系统或应用程序的类路径以进行迁移。根据模式历史记录表检查迁移。如果它们的版本号低于或等于标记为当前的版本之一,它们将被忽略。
剩余的迁移是待处理的迁移:可用,但未应用。
然后它们按版本号排序并按顺序执行:
架构历史表会相应更新:
就是这样!每当需要发展数据库时,无论是结构 (DDL) 还是参考数据 (DML),只需创建一个版本号高于当前版本号的新迁移即可。下次 Flyway 启动时,它会找到它并相应地升级数据库。
引入依赖
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>8.5.4</version>
</dependency>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>8.5.4</version>
</plugin>
配置
spring:
flyway:
enabled: true
encoding: UTF-8
clean-disabled: true
locations: classpath:db/migration
# sql文件命名规范:V版本号__描述.sql,例:V1.0__init_db.sql
sql-migration-prefix: V # V代表版本迁移,U代表撤销迁移,R代表可重复迁移
sql-migration-separator: __ # 分隔符:固定由两个下划线 __ 组成
sql-migration-suffixes: .sql # 后缀
validate-on-migrate: true # 执行迁移时是否自动调用验证
baseline-on-migrate: true # 迁移非空模式时是否自动调用基线
在resoures下 创建 db/migration
我们只需要将sql脚本放在 db/migration下,项目启动,即可自动同步数据库了
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/su2231595742/article/details/123780700
内容来源于网络,如有侵权,请联系作者删除!