目录

一:前言

二:选型

三: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:范围扫描   例如某个路径下所以文件

java控制数据库语法实现 java 数据库版本控制_数据库版本控制

方式2:扫描文件单独配置   一个include标签对应一个配置文件

java控制数据库语法实现 java 数据库版本控制_数据库版本控制_02

日志文件支持多种格式,如 XML, YAML, JSON, SQL等 建议使用xml标签方式,比较方便 1.使用sql标签,内容为数据库相关变动,sql语句即可 2.changeSet下标准数据库操作标签, 例如:建表createTable标签 

四:常见问题

4.1锁等待问题

java控制数据库语法实现 java 数据库版本控制_SQL_03

 

 

4.2杀进程问题

杀进程停止服务,可能导致liquibaset未正常结束,日志表处于锁的状态,和4.1一致,解开锁,要考虑是否前后冲突的问题s

4.3初始化bean问题

场景描述: 例如bean内要在项目启动中读取数据库等操作。 由于liquibase是bean之后操作的,第一次项目启动,没有相关表会导致项目启动报错,建议加上懒加载,项目启动不加载

4.4changeset执行后不允许更改

java控制数据库语法实现 java 数据库版本控制_liquibase_04

 liquiase以日志的方式执行版本控制, 第一次执行完成后数据库有一张日志表,记录本次执行配置并记录加密的配置内容, 下一次启动,执行update,会调用valid校验,当前配置和之前配置是否一直,不一致就会报错;

五.liquibase使用开发规范

根据项目决定

六.额外扩展

6.1.例如版本控制调用的update方法

java控制数据库语法实现 java 数据库版本控制_SQL_05

1.锁等待、且判断,加锁

2历史.数据校验

3.执行数据库配置文件,解锁

java控制数据库语法实现 java 数据库版本控制_数据库_06

 

6.2.版本回滚 

java控制数据库语法实现 java 数据库版本控制_数据库_07

java控制数据库语法实现 java 数据库版本控制_SQL_08

 

java控制数据库语法实现 java 数据库版本控制_liquibase_09