在项目中引入liquibase过程:
1、父项目 pom.xml 中添加依赖
mysql
mysql-connector-java
5.1.30
org.liquibase
liquibase-core
3.5.5
2、添加liquibase.properties文件
#liquibase
changeLogFile=src/main/resources/liquibase/db.changelog-master.xml
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
username=root
password=egova
3、父项目 pom中添加liquibase插件
org.liquibase
liquibase-maven-plugin
3.5.1
src/main/resources/liquibase.properties
true
src/main/resources/liquibase/changelog_dev.xml
4、新建changelog主文件入口: db.changelog-master.xml
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
5、打开maven命令框:可以选择模块
6、生成changelog
liquibase:generateChangeLog
(1) 对当前数据库状态生成 changlog:
mvn liquibase:generateChangeLog
(2)只对数据生成 changelog ,(先用别的方式往数据库创建数据后再用此方式生成changelog)
mvn liquibase:generateChangeLog -Dliquibase.diffTypes=data
区别:前者是在changelog中追加表创建语句,生成建表语句和数据插入语句,如果表语句已存在,则只生成建表语句:如图
View Code
7、执行changelog,写入数据库
在changeset中添加createTable语句,执行liquibase,使用命令:
liquibase:update 将changelog变化的内容写入数据库
liquibase:updateSQL 检查changelog语法的合法性
8、在项目中使用liquibase
@BeanpublicSpringLiquibase liquibase(DataSource dataSource, LiquibaseProperties liquibaseProperties) {
SpringLiquibase liquibase= newSpringLiquibase(taskExecutor, env);
liquibase.setDataSource(dataSource);//制定changelog的位置,这里使用的一个master文件引用其他文件的方式
liquibase.setChangeLog("classpath:config/liquibase/db.changelog-master.xml");
liquibase.setContexts(liquibaseProperties.getContexts());
liquibase.setDefaultSchema(liquibaseProperties.getDefaultSchema());
liquibase.setDropFirst(liquibaseProperties.isDropFirst());returnliquibase;
}
liquibase命令大全
命令名称命令描述
update
更新数据库到当前版本
updateSQL
写入SQL将数据库更新到currentversion或STDOUT
updateCount
将下一个NUM更改应用到数据库
updateCountSQL
写入SQL以将下一个NUM更改应用到数据库
updateToTag
使用指定的标记将数据库更新到变更集
updateToTagSQL
使用指定的标记将SQL写入(到标准输出)到更改集
rollback
将数据库回滚到指定标签的状态is was
rollbackSQL
生成数据库回滚到指定标签的sql
rollbackToDate
将数据库回滚到给定日期/时间的状态is was。日期格式:yyyy-MM-dd 'HH: mm: ss
rollbackToDateSQL
写入SQL以将数据库回滚到给定日期/时间版本的状态到STDOUT
rollbackCount
回滚应用于数据库的最后一个更改集
rollbackCountSQL
写入SQL以回滚最后一个更改集到应用于数据库的stdoutapply
futureRollbackSQL
写入SQL,以便在更改日志中的更改完成后将数据库回滚到当前状态
futureRollbackSQL
在更改日志中的更改完成后,写入SQL以将数据库回滚到当前状态
futureRollbackFromTagSQL
写入(到标准输出)SQL,以便在更改后将数据库回滚到其当前状态
updateTestingRollback
更新数据库,然后再次回滚更改。用于测试回滚支持
generateChangeLog
写入更改日志XML以将数据库的当前状态复制到标准输出
snapshot
将数据库的当前状态写入标准输出
snapshotReference
将referenceUrl数据库的当前状态写入标准输出
Diff Commands
数据库对比命令
diff [diff parameters]
数据库对比命令
diffChangeLog [diff parameters]
数据库对比日志
Documentation Commands
文档命令
dbDoc
基于当前数据库和更改日志生成类似javadoc的文档
Maintenance Commands
维护命令
tag
给当前的数据库打标签,方便日后回滚
tagExists
检查对应的标签是否存在
status [--verbose]
输出为执行changeset的行数
unexpectedChangeSets[--verbose]
输出本地不存在changeset 行数
validate
检查是否有错误的changelog
calculateCheckSum
检查指定changeset id 的checksum值 格式为 filepath::id::author
clearCheckSums
从数据库日志中删除所有保存的校验和
changelogSync
标记所有的更改已执行
changelogSyncSQL
生成标记更改已执行的sql并输出到标准输出
markNextChangeSetRan
将下一个变更标记为已执行
markNextChangeSetRanSQL
生成将下一个变更标记为已执行的sql并输出到标准输出
listLocks
列出liquibase数据库锁
releaseLocks
释放所有的liquibase数据库锁
dropAll
删除数据库表(慎用!)