孙宇的技术专栏 大数据/机器学习

数据库迁移工具flyway

2019-03-09

阅读:


介绍

项目多人开发时,通常数据库都是在本地。有一人改动了库,其他人如果没得到通知并调整,往往会报错。这时候项目内的数据库统一构建、迁移就有必要了。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


评论

文章