LiquiBase
是一个用于数据库重构和迁移的开源工具,经过日志文件的形式记录数据库的变动,而后执行日志文件中的修改,将数据库更新或回滚到一致的状态。它的目标是提供一种数据库类型无关的解决方案,经过执行schema类型的文件来达到迁移。其有点主要有如下:html
更多详情介绍,能够浏览官网doc。java
之因此选择使用liquibase,缘由其实挺尴尬的,因为我不会使用容器化技术,不会写dockfile来运行项目初始化sql脚本,就想有没有什么简单方便的形式,最后看中了liquibase,配置起来确实简单方便。
我是用命令行的形式生成changeLog
,而后再集成到springboot
中。官网上提供的还有基于ant、maven和服务端的使用的方式,之后再研究。mysql
下载liquibase的安装包,解压到指定目录下;
git
经过generateChangeLog
生成现有数据库的changeLog文件;github
liquibase --driver=com.mysql.jdbc.Driver --classpath=mysql-connector-java-5.1.27.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/blog" --username=root --password=root generateChangeLog
generateChangeLog命令默认只会建立数据库结构的变动日志文件,若是但愿建立插入数据的变动日志文件,可使用参数diffTypes,该参数包括以下可选项:spring
data
例如生成数据:sql
liquibase --driver=com.mysql.jdbc.Driver --classpath=mysql-connector-java-5.1.27.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/blog" --username=root --password=root --diffTypes=data generateChangeLog
我分别生成了两个changeLog文件,一个是inti-table.xml; 一个是init-data.xml。
3.项目中配置liquibase
首先在项目中添加支持:数据库
<dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> </dependency>
经过查看源码,咱们能看到默认的配置文件存放的位置:
springboot
这里我没有使用默认的配置,指定了一个本身的路径,只须要在application.properties中添加以下配置:app
#liquibase liquibase.change-log=classpath:/liquibase/master.xml --master.xml文件内容,经过inclue标签引入了两个changelog,就是以前的表结构和表数据。 <?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.4.xsd"> <include file="classpath:liquibase/change_log/init-table.xml" relativeToChangelogFile="false"/> <include file="classpath:liquibase/change_log/init-data.xml" relativeToChangelogFile="false"/> </databaseChangeLog>
项目中的目录结构以下图所示:
到此已经位置好了,启动一下项目,控制台打印出liquibase初始化信息,这时候查看数据库,会表现数据库已经初始完毕,后面数据库若是有变更,能够再生成新的changelog文件,再次添加到项目中,达到持续集成的效果。整个项目的源代码已经托管到github上了,能够点击查看。