Liquibase概述
Liquibase 是一个开源的数据库变更管理工具,用于跟踪、版本化、和管理数据库结构(如表、字段、索引等)的变更。它的目的是使数据库变更的过程更加透明、可控制、自动化,避免开发团队在多个环境中手动执行相同的数据库变更脚本。
Liquibase 支持多种数据库(MySQL、PostgreSQL、Oracle、SQL Server、H2 等),并能够通过 XML、YAML、JSON 或 SQL 文件来定义数据库变更。
主要特点
- 版本控制:将数据库变更与代码同步管理,避免手动更改数据库结构。
- 自动化迁移:在不同环境(开发、测试、生产等)中自动应用数据库变更。
- 可回滚性:Liquibase 提供了回滚机制,可以回到之前的数据库版本。
- 支持多种格式:支持 XML、YAML、JSON 等格式来描述变更。
- 集成方便:Liquibase 可以集成到 CI/CD 流程中,或者与 Spring Boot 等框架配合使用,轻松管理数据库版本。
工作机制
Liquibase 使用一个名为 changelog 的文件来描述数据库的所有变更。这个文件记录了所有执行过的数据库变更集合(changeSets)。每个 changeSet 都有一个唯一的 ID 和作者标识,用来追踪该变更。
Liquibase 会通过 changelog 文件自动管理数据库的版本和变更。它会在每次应用变更时,通过一个 DATABASECHANGELOG 表记录哪些变更已经应用过了
与SpringBoot结合使用
由于我这边项目上使用的是xml方式,就用xml方式进行示例,其余方式的方法,大家感兴趣的可以自行前往官网查看文档。
传送门:Liquibase Documentation
引入依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>demo</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>demo</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.7.9</version> <type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.liquibase</groupId><artifactId>liquibase-core</artifactId><version>4.21.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version> <!-- 或者根据需要使用适合的版本 --></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version> <configuration><source>17</source> <target>17</target> </configuration></plugin></plugins></build>
</project>
配置文件
spring:datasource:url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useSSL=falseusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 10liquibase:change-log: classpath:liquibase/platform/changeSet.xmlenabled: true
创建 Liquibase 变更集文件
<?xml version="1.0" encoding="UTF-8"?><databaseChangeLogxmlns="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.1.xsd"><include file="liquibase/platform/change/change01.xml"/>
</databaseChangeLog>
具体的变更集文件
<?xml version="1.0" encoding="UTF-8"?><databaseChangeLogxmlns="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.1.xsd"><changeSet id="1" author="bob"><createTable tableName="department"><column name="id" type="int"><constraints primaryKey="true" nullable="false"/></column><column name="name" type="varchar(50)"><constraints nullable="false"/></column><column name="active" type="boolean" defaultValueBoolean="true"/></createTable></changeSet></databaseChangeLog>
常用命令
- liquibase update: 应用所有未执行的数据库变更。
- liquibase rollback: 回滚数据库到指定的 changeSet 或版本。
- liquibase status: 查看当前数据库的变更状态。
- liquibase generateChangeLog: 根据现有数据库生成初始的 changeLog 文件。
总结
Liquibase 是一个强大的数据库管理工具,它帮助你通过自动化管理数据库的变更、版本控制、和回滚,简化了开发中的数据库迁移工作。通过在 Spring Boot 中集成 Liquibase,可以更高效地管理数据库结构和版本,确保开发团队的协作更加流畅。在项目中,Liquibase 可以和 Git 等版本控制工具配合使用,确保数据库结构变更的透明性和可追溯性。