前言
项目中版本发布需要做一个版本管理工具,项目使用 SpringBoot
框架。
目前有两款 liquibase
和 flyway
。
flyway
不支持并发,也就是集群项目会执行多次,进而否掉。
Liquibase
:
- 支持执行锁、回滚;
- 支持
MySQL
, PostgreSQL
, Oracle
, Sql Server
等;
- 支持多开发者(每个脚本必须写
author
);
- 多种运行方式:命令行、
Spring
集成、Maven
插件等
官网
Liquibase
文件结构:
1 2 3 4 5 6 7 8 9 10
| databaseChangeLog ├── createTable | ├── column | ├── ... | └── remarks ├── createView | ├── ... | └── viewName ├── ... └── sqlFile
|
Liquibase
使用
Maven
引入
1 2 3 4 5 6
| <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>4.6.0</version> </dependency>
|
配置
application.yml
文件配置
1 2 3 4 5 6 7 8 9 10 11 12
| spring: liquibase: enabled: true change-log: classpath:/liquibase/change_log/Init_table.xml drop-first: false database-change-log-table: DATABASECHANGELOG database-change-log-lock-table: DATABASECHANGELOGLOCK
|
Init_table.xml
文件配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd"> <changeSet id="V0.0.1-20211017-001" author="maxzhao"> <createTable tableName="a_demo_user" remarks="用户表"> <column name="id" type="bigint" remarks="用户主键"> <constraints nullable="false" primaryKey="true" primaryKeyName="pk_a_demo_user_id"/> </column> <column name="username" type="varchar(100)" remarks="用户名"> <constraints nullable="false"/> </column> <column name="password" type="varchar(100)" remarks="密码"> <constraints nullable="false"/> </column> </createTable> </changeSet> </databaseChangeLog>
|
注意:
ID
是唯一的,是存储数据库中判断 ChangeSet
是否执行的重要依据
SQL
脚本文件不应该包含 schema
名称
- 表、字段需要添加
remarks
注释
- 已经执行的
changeSet
禁止修改,启动会报错。
- 不要随便升级版本,特别是大版本。不同版本的
CHangeSet MD5SUM
算法很可能不一样。
- 不要添加业务数据的修改,可能换个项目就不能用了。
生成已存在表结构
1 2 3 4
| # 生成表结构 liquibase --driver=com.mysql.cj.jdbc.Driver --classpath=mysql-connector-java-8.0.26.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/blog" --username=root --password=root generateChangeLog # 生成表数据 liquibase --driver=com.mysql.cj.jdbc.Driver --classpath=mysql-connector-java-8.0.26.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/blog" --username=root --password=root --diffTypes=data generateChangeLog
|
本文地址: https://github.com/maxzhao-it/blog/post/cf860b21/