我们有许多源代码库,如git 和svn ,用于管理和跟踪使用编程语言开发的应用程序的代码变化。
你有没有想过,如何管理、跟踪和应用数据库模式的变化?这篇文章解释了名为liquibase 的工具,这是一个开源的库,可以在一个地方跟踪和进行数据库修改。
Liquibase在脚本或变更日志中维护和跟踪变化。
这个变更日志被配置在XML,JSON,YAML 和SQL 。特点:
- 支持所有主要的数据库
- 生成数据库差异报告
- 数据库模式变更日志
- 使用这个工具可以进行数据库迁移
如何在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是开源的库工具,这些都是作为数据库迁移工具使用的
| Liquibase | Flyway |
|---|---|
| 支持比较数据库的版本 | 不支持数据库的比较 |
| 支持回滚数据库 | 付费版本中支持回滚 |
| 可定义XML、SQL、JSON和YAML的变化 | 更改只定义为SQL |
| 易于管理更改 | 与Liquibase相比,它很复杂 |
| 仪表板可以跟踪和查看更改 | 不支持仪表盘 |
| 支持像Git那样的干运行 | 付费版本支持干运行 |