数据库版本管理

| 分类 SPRINGBOOT  | 标签 flowfly  liquibase  mysql  spring-boot  database 

以下是两个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。

Flyway 和 Liquibase 比较

相同点

  • 都支持主流那几个数据库
  • 都提供了命令行,API,maven,gradle等等工具

不同点

Flyway

  1. 版本是用文件名管理的,如:V1_file.sql, V2_file.sql …
  2. 版本文件基于 SQL 的,所以如果不需要考虑切换数据库,可以写基于数据库特性的 SQL,并且支持 PL/SQL,T-SQL
  3. 基于 Java 的,个性化扩展很容易

Liquibase

  1. 版本管理的方式是指定 Id 和 Author,会在数据库中插入表 DATABASECHANGELOG,DATABASECHANGELOGLOCK,记录版本信息。
  2. 版本文件基于多种格式:xml, yaml, json, sql。XML 有定义好的 Schema,使用指定的 tag 来定义 SQL,需要切换数据库的很容易,liquibase 可以把 XML 翻译成指定的 SQL。
  3. 如果想用 sql 格式的版本文件,建议直接考虑 Flyway。因为你可能引入数据库相关的 SQL 语法。
  4. Liquibase 最方便的地方是能迁移现有的数据库。也就是说,你在项目的任何时候都可以用上 Liquibase。

所以感觉这两个的区别,就很像Hibernate和Mybatis,没有最好,只有最合适。

Liquibase使用

spring-boot中使用

spring-boot 直接支持Flyway和Liquibase。

在项目中加入Liquibase的依赖:

<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
</dependency>

在application.properties文件中,加入以下配置:

liquibase.change-log = classpath:/db/changelog/db.changelog-master.yaml
liquibase.url = jdbc:mysql://localhost:3306/db?useSSL=false
liquibase.user = username
liquibase.password = password

如果你的 liquibase.change-log 这一行跟上边一摸一样,就可以直接删掉。

maven中使用

在项目中加入liquibase-maven-plugin插件:

<build>
  <pluginManagement>
    <plugins>
      <!-- liquibase maven plugin -->
      <plugin>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-maven-plugin</artifactId>
        <version>3.5.3</version>
        <configuration>
          <propertyFile>liquibase.properties</propertyFile>
        </configuration>
        <executions>
          <execution>
            <phase>process-resources</phase>
            <goals>
              <goal>update</goal>
              <goal>tag</goal>
              <goal>rollback</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </pluginManagement>
</build>

使用的命令是:

动作 命令
更新 mvn liquibase: update
打标签  
回滚  

这个配置官网都有教程,有一点需要说明,这里需要加上<pluginManagement>这个标签,官网上没有。如果不加会报如下错误:

Plugin execution not covered by lifecycle configuration: org.liquibase:liquibase-maven-plugin:3.0.5:update


上一篇     下一篇