目录
一:前言
二:选型
三:java项目使用,boot
3.1添加依赖
3.2增加配置
3.3支持的配置文件种类以及选型
四:常见问题
4.1锁等待问题
4.2杀进程问题
4.3待完善
五.liquibase使用开发规范
六.额外扩展
6.1.例如版本控制调用的update方法
6.2.待完善
一:前言
Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。
它将所有数据库的变化(包括结构和数据)都保存在 changelog 文件中,便于版本控制,它的目标是提供一种数据库类型无关的解决方案,通过下项目初始化加载时扫描配置文件来实现数据库的版本迭代。
二:选型
Java(SpringBoot)数据库版本管理工具目前主流的就是flyway和liquibase。
Flyway | Liquibase | |
支持数据库 | Oracle、SQL Server、DB2、H2、Amazon RDS、Google Cloud SQL、Heroku等 | oracle、DB2、H2、MariaDB、SQL Server、SQLite、Azure SQL、Amazon RDS、Amazon Aurora等 |
执行脚本 | 纯SQL(支持多种SQL语法) Java(主要用于更复杂的转换) | 日志文件支持多种格式,如 XML, YAML, JSON, SQL等 |
跨平台 | 否 | 支持 |
运行方式 | 命令行、Spring 集成、Maven 插件、 | 命令行、Spring 集成、Maven 插件、Gradle 插件等 |
等 |
三:java项目使用,boot
3.1添加依赖
<!-- liquibase -->
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
3.2增加配置
spring:
# liquibase配置
liquibase:
enabled: true
change-log: "classpath:/db/changelog/db.changelog-master.yaml"
额外扩展:
无change-log配置时,默认扫描路径是:classpath:/db/changelog/db.changeog-mster.yaml
3.3支持的配置文件种类以及选型
即3.2中的配置文件,改配置文件中指定项目数据库版本控制扫描文件路径
方式1:范围扫描 例如某个路径下所以文件
方式2:扫描文件单独配置 一个include标签对应一个配置文件
日志文件支持多种格式,如 XML, YAML, JSON, SQL等 建议使用xml标签方式,比较方便 1.使用sql标签,内容为数据库相关变动,sql语句即可 2.changeSet下标准数据库操作标签, 例如:建表createTable标签
四:常见问题
4.1锁等待问题
4.2杀进程问题
杀进程停止服务,可能导致liquibaset未正常结束,日志表处于锁的状态,和4.1一致,解开锁,要考虑是否前后冲突的问题s
4.3初始化bean问题
场景描述: 例如bean内要在项目启动中读取数据库等操作。 由于liquibase是bean之后操作的,第一次项目启动,没有相关表会导致项目启动报错,建议加上懒加载,项目启动不加载
4.4changeset执行后不允许更改
liquiase以日志的方式执行版本控制, 第一次执行完成后数据库有一张日志表,记录本次执行配置并记录加密的配置内容, 下一次启动,执行update,会调用valid校验,当前配置和之前配置是否一直,不一致就会报错;
五.liquibase使用开发规范
根据项目决定
六.额外扩展
6.1.例如版本控制调用的update方法
1.锁等待、且判断,加锁
2历史.数据校验
3.执行数据库配置文件,解锁
6.2.版本回滚