介绍
项目多人开发时,通常数据库都是在本地。有一人改动了库,其他人如果没得到通知并调整,往往会报错。这时候项目内的数据库统一构建、迁移就有必要了。php 的 laravel、thinkphp 等框架都带有这种工具。JAVA 也可以用 flyway
来实现。
如果项目中有人改动了数据库,就往项目中添加一个 sql 文件。项目组其他人更新该文件到本地后,执行该文件即可。通常我们要手动执行脚本,而且要关注哪些文件是已经执行的,哪些是需要执行的。
flyway 就是用来做这个事,它会在本地的数据库中维护一个表,用来记录当前已经执行了哪些文件。而且它提供命令行工具,执行后会自动把未执行的文件都执行一遍。
构建
在 pom.xml 中引用:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-maven-plugin</artifactId>
<version>5.2.4</version>
<configuration>
<url>jdbc:mysql://localhost/cop_kpi</url>
<user>root</user>
<password>root</password>
<table>schema_history</table>
<baselineOnMigrate>false</baselineOnMigrate>
</configuration>
</plugin>
</plugins>
</build>
这里要配置本地数据库。
本地开发时,如果对数据库结构有更新或创建操作,将 sql 文件放在 src/main/resources/db/migration
下
文件命名规范为: V[Version]__Create_person_table.sql
其中,Version 必须要在当前文件里累加.
更新完项目后,可以运行:
mvn flyway:migrate
如果运行时碰到诸如 Validate failed: Migration checksum mismatch for migration version
错误,可以先执行:mvn flyway:repair