如何在java中为数据库变化添加更新日志 | Liquibase spring boot教程

312 阅读2分钟

我们有许多源代码库,如gitsvn ,用于管理和跟踪使用编程语言开发的应用程序的代码变化。

你有没有想过,如何管理、跟踪和应用数据库模式的变化?这篇文章解释了名为liquibase 的工具,这是一个开源的库,可以在一个地方跟踪和进行数据库修改。

Liquibase在脚本或变更日志中维护和跟踪变化。

这个变更日志被配置在XML,JSON,YAMLSQL特点:

  • 支持所有主要的数据库
  • 生成数据库差异报告
  • 数据库模式变更日志
  • 使用这个工具可以进行数据库迁移

如何在Spring Boot应用程序中集成Liquibase?

本教程不包括如何创建一个Spring Boot应用程序。

创建一个变更日志文件

这个.yaml ,包含以xml或任何格式liquibase/db.changelog-master.yaml定义的变更日志列表。

databaseChangeLog:
  - include:
      file: liquibase/create-user.xml
  - include:
      file: liquibase/02-insert-users.xml

这里是Liquibase中创建用户的表模式定义的代码跟踪变化。liquibase/creat-user.xml:

<?xml version="1.0" encoding="UTF-8"?>

<databaseChangeLog
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

  <changeSet id="01" author="Kiran">
    <createTable tableName="users"
      remarks="Table to store all user information">
      <column name="id" type="int" autoIncrement="true">
        <constraints nullable="false" unique="true" primaryKey="true"/>
      </column>
      <column name="name" type="varchar(100)">
        <constraints nullable="false" unique="true"/>
      </column>
        <column name="role" type="varchar(100)">
        <constraints nullable="false"/>
      </column>

    </createTable>
</databaseChangeLog>

这里是跟踪插入初始用户数据的变化的代码

liquibase/insert-user.xml:




<?xml version="1.0" encoding="UTF-8"?>

<databaseChangeLog
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">

  <changeSet id="01" author="Kiran">
    <comment>user insertion data and changelog</comment>
    <insert tableName="users">
      <column name="id" valueNumeric="1"/>
      <column name="name" value="Eric"/>
      <column name="role" value="admin"/>
    </insert>
    <insert tableName="users">
      <column name="id" valueNumeric="2"/>
      <column name="name" value="Andrew"/>
      <column name="role" value="sales"/>
    </insert>
    <insert tableName="users">
      <column name="id" valueNumeric="3"/>
      <column name="name" value="John"/>
      <column name="role" value="marketing"/>
    </insert>
    <insert tableName="users">
      <column name="id" valueNumeric="4"/>
      <column name="name" value="Denv"/>
      <column name="role" value="admin"/>
    </insert>
  </changeSet>
</databaseChangeLog>

让我们把liquibase的maven依赖性添加到pom.xml中。


<dependency>
      <groupId>org.liquibase</groupId>
      <artifactId>liquibase-core</artifactId>
    </dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.25</version>
</dependency>

如果你想在maven安装过程中创建一个数据库,你可以配置以下设置。

<plugin>
   <groupId>org.liquibase</groupId>
   <artifactId>liquibase-maven-plugin</artifactId>
   <version>4.4.0</version>
   <configuration>
      <changeLogFile>liquibase/db.changelog-master.xml</changeLogFile>
      <driver>com.mysql.jdbc.Driver</driver>
      <url>${jdbc.url}</url>
      <username>${jdbc.username}</username>
      <password>${jdbc.password}</password>
   </configuration>
   <executions>
      <execution>
         <phase>process-resources</phase>
         <goals>
            <goal>update</goal>
         </goals>
      </execution>
   </executions>
</plugin>

如果你使用gradle构建工具,你可以使用下面的依赖性。

dependencies {
    classpath 'org.liquibase:liquibase-core:4.4.0'
    classpath "org.liquibase:liquibase-gradle-plugin:2.0.4"
    }

我们在数据库中有一个用户表,包含ID、姓名和角色。

一旦安装和配置了构建依赖,Spring boot应用程序就会自动在数据库中运行脚本,跟踪变化。

这在启动时配置和运行数据库模式的变化。

Spring boot的配置被维护在application.properties

liquibase.enabled=false or 
spring.liquibase.enabled=false

这些属性可以被启用或禁用,以便在启动时运行liquibase。liquibase.enabled属性用于Spring 4.x.x版本spring.liquibase.enabled 属性用于Spring 5.x.x版本x Spring

让我们看看liquibase和flyway数据库的比较。

Liquibase和Flyway是开源的库工具,这些都是作为数据库迁移工具使用的

LiquibaseFlyway
支持比较数据库的版本不支持数据库的比较
支持回滚数据库付费版本中支持回滚
可定义XML、SQL、JSON和YAML的变化更改只定义为SQL
易于管理更改与Liquibase相比,它很复杂
仪表板可以跟踪和查看更改不支持仪表盘
支持像Git那样的干运行付费版本支持干运行