SpringBoot项目使用Liquibase数据库版本管理方式
数据库版本管理
概述
Liquibase 是一个用于数据库重构、变更管理和版本控制的开源工具。
它通过对数据库变更进行版本化管理,支持多人协作开发、多分支合并,并提供多种数据库类型的支持。
特点
- 多数据库支持:MySQL、PostgreSQL、Oracle、SQL Server、DB2、H2等
- 多格式变更日志:XML、YAML、JSON、SQL
- 上下文执行逻辑:支持按需运行特定上下文变更
- 集群安全更新:确保分布式环境下的数据库更新安全
- 变更文档生成:自动生成数据库修改文档(HTML格式)
- 数据库对比:使用命令对比两个数据库结构差异
- 多平台集成:支持命令行、Ant、Maven及应用程序内嵌
集成步骤
1. 添加依赖
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
2. 创建目录结构
在项目 resources 目录下创建 liquibase 目录用于存放 liquibase 相关的配置文件,在 liquibase 目录下创建 changelog 目录存放所有 changelog 文件
src/main/resources/
└── liquibase/
├── master.xml
└── changelog/
├── common/
│ ├── master.xml
│ └── 20230110_common_init_table.sql
└── other_module/
3.创建master.xml文件
在 liquibase 目录下的 master.xml 为 liquibase 的入口,通过 include 标签将其它的 master.xml文件引入进来。
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="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.4.xsd">
<!--
1:includeAll 标签可以把一个文件夹下的所有 changelog 都加载进来。如果单个加载可以用 include。
2:includeAll 标签里有两个属性:path 和 relativeToChangelogFile。
2.1:path (在 include 标签里是 file):指定要加载的文件或文件夹位置
2.2:relativeToChangelogFile :文件位置的路径是否相对于 root changelog 是相对路径,默认 false,即相对于 classpath 是相对路径。
-->
<include file="liquibase/changelogs/common/master.xml"/>
</databaseChangeLog>
具体模块的master.xml
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns="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.4.xsd">
<!--
1:includeAll 标签可以把一个文件夹下的所有 changelog 都加载进来。如果单个加载可以用 include。
2:includeAll 标签里有两个属性:path 和 relativeToChangelogFile。
2.1:path (在 include 标签里是 file):指定要加载的文件或文件夹位置
2.2:relativeToChangelogFile :文件位置的路径是否相对于 root changelog 是相对路径,默认 false,即相对于 classpath 是相对路径。
-->
<changeSet id="liquibase/20230110_common_init_table.sql" author="xxxx">
<sqlFile path="liquibase/20230110_common_init_table.sql"/>
</changeSet>
</databaseChangeLog>
id:执行id,执行文件名称
4. 应用配置
指定 liquibase 的 changelog文件
spring:
liquibase:
enabled: false # 是否启用
change-log: classpath:/liquibase/master.xml
changelog文件命名规则
- 文件名称:日期_说明_data/table.xml
注意事项
初始化顺序问题
问题描述:
- @PostConstruct注解的方法会在Liquibase之前执行,如果这些方法需要访问数据库,会导致错误。
解决方案:
- 使用CommandLineRunner或ApplicationRunner接口替代@PostConstruct
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java利用Spire.PDF for Java实现将TXT转换为PDF
在现代企业和个人开发中,文档格式的转换是一项常见且重要的任务,本文将深入探讨如何利用功能强大的Spire.PDF for Java库,轻松实现Java中TXT到PDF的转换,希望对大家有所帮助2025-11-11
Nacos-SpringBoot框架启动不加载bootstrap.yml的解决
这篇文章主要介绍了Nacos-SpringBoot框架启动不加载bootstrap.yml的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-11-11
SpringBoot结合Neo4j自定义cypherSql的方法
这篇文章主要介绍了SpringBoot结合Neo4j自定义cypherSql,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-11-11
SpringBoot+MyBatis整合ClickHouse实践记录
本文介绍了如何使用SpringBoot、MyBatis和ClickHouse整合,包括添加依赖、配置数据源、创建实体类、Mapper接口、服务层和控制器的步骤,通过这些步骤,可以使Java应用程序高效地与ClickHouse数据库进行交互,感兴趣的朋友跟随小编一起看看吧2024-12-12


最新评论