liquibase官网
liquibase是一款用于数据库管理重构以及迁移的一款开源工具。
他通过文件记录对数据库的修改,将数据库更新或者会滚到对应的状态。
liquibase目前支持目前大部分主流的数据库,例如mysql、MySQL, PostgreSQL, Oracle, Sql Server, DB2等等。
1、统一记录数据库的变更。
在项目开发的过程中,经常会因为需求的变更导致已经设计好的数据库表需要添加字段。如果不将这些字段统一维护起来,那么当项目部署到其他环境时有可能会引发项目部署失败。
2、liquibase的记录文件可以被git管理。
这样就可以支持多人进行维护。
3、丰富的日志文件格式。
支持如XML, YAML, JSON, SQL多种记录的文件格式
4、支持多种运行方式,如命令行、Spring集成、Maven插件、Gradle插件等;
因为我们的项目是maven项目所以只介绍maven项目引入liquibase
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.5.0</version>
</dependency>
一般我们在项目开发前会先进行数据库的设计,那么已经创建好的数据如果用liquibase管理呢?
我们可以使用liquibase的maven插件,对已经创建好的数据库进行逆向生成change-log(liquibase 记录数据库变更的文件,一般为xml格式)
我们可以根据此模板来配置liquibase的插件配置文件
org.liquibase
liquibase-maven-plugin
3.4.2
${basedir}/src/main/resources/liquibase/authentication/changelog.xml
${basedir}/src/main/resources/liquibase/authentication/changelog.xml
com.mysql.jdbc.Driver
jdbc:mysql://127.0.0.1:3306/test
root
123456
UTF-8
true
false
tables, views, columns, indexs,foreignkeys, primarykeys, uniqueconstraints, data
配置好maven插件之后,我们就会在maven的插件列表里看到liquibase的插件,如下图:
双击运行此功能,按照我们的设置逆向生成changelog文件
生成结果:
下面是生成的文件的格式,我们稍后再做解读
创建matser文件,创建master文件的目的,是为了更好的维护所有的changelog文件
<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.8.xsd">
<include file="/authentication/changelog.xml" relativeToChangelogFile="true" />
databaseChangeLog>
我们引入liquibase后,需要在项目的配置文件中对liquibase进行配置,liquibase会将对master文件中include的changelog文件进行管理
spring:
liquibase:
change-log: classpath:/liquibase/master.xml #
当我们配置好liquibase后,启动项目就会按照我们配置的changelog文件生成制定的数据库表(注意,如果数据中该表已经存在的话,启动可能会报“数据库已经存在”的错,我们可以将数据库表删除,在启动项目即可)
项目启动后,会重新创建此数据库表,并且还会在数据库中生成两张表。
其中‘DATABASECHANGELOG‘此表中记录,changelog的执行记录
‘DATABASECHANGELOGLOCK’ 此表是一个锁,当有changelog执行的时候,会获取这个锁,其他线程的changelog是需要等到当前changelog执行完毕释放锁后再执行。保证了线程安全性。