Spring Cloud Alibaba 接入 Liquibase
为现有既有项目添加 Liquibase 支持的实践
Liquibase 实践指南
背景介绍
Liquibase 是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在 XML (或其他格式)文件中,便于版本控制。
在对数据库没有版本控制工具的情况下,每当系统上线,往往需要开发人员手动去对数据库进行维护,这毫无疑问是十分危险的。为了避免人工操作可能导致错误的发生,采用类似 Liquibase 的数据库版本控制工具是十分必要的。
类似的工具还有 Flyway
改造思路
由于在实际的开发中,未必可以一次性将所有环境与服务数据库均改为使用 Liquibase 控制,所以可以考虑默认将服务配置 spring.liquibase.enabled
配置为 false
,在需要的线上环境使用类似 Nacos 进行配置下发以开启功能。
改造步骤
-
pom.xml
文件:添加liquibase
依赖<!--Liquibase 依赖--> <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> </dependency>
并增加
<plugins>
插件以实现便捷操作。<plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <configuration> <!--properties文件路径,该文件记录了数据库连接信息等--> <propertyFile>src/main/resources/liquibase/liquibase.properties</propertyFile> <propertyFileWillOverride>true</propertyFileWillOverride> </configuration> </plugin>
-
在
resources
文件下创建如下结构:其中
changeMaster.xml
文件内容:<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-4.5.xsd"> <include file="liquibase/changelog/init/changelog-table-init.xml"/> <include file="liquibase/changelog/init/changelog-data-init.xml"/> <includeAll path="liquibase/changelog/upgrade"/> </databaseChangeLog>
changelog-table-init.xml
将会用于存储表结构,而changelog-data-init.xml
则存储初始化的数据。upgrade
文件夹中则存储之后更新所需的增量改动。liquibase.properties
文件内容:如果项目数据库配置在本地而非下发,可以跳过此处数据库配置。driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://mysql:3306/mysql?createDatabaseIfNotExist=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai username=changeme password=changeme outputChangeLogFile=src/main/resources/liquibase/changelog/init/changelog-table-init.xml
-
application.yml
增加配置项liquibase: change-log: classpath:liquibase/changeMaster.xml enabled: false
使用方法
-
初次导出所有表结构: 如果在
liquibase.properties
中不配置diffTypes
,liquibase-maven-plugin
将会默认读取数据库的tables, views, columns, indexes, foreignkeys, primarykeys, uniqueconstraints
. 在 IDEA 的 Maven 工具栏中点击对应服务的liquibase:generateChangeLog
,即可自动生成表结构对应 xml。 -
导出初始化数据: 首先保证所链接数据库仅存在业务所需要的初始化数据,将
liquibase.properties
修改如下,并依旧使用liquibase:generateChangeLog
即可生成初始化的数据 xml。driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql://mysql:3306/database?createDatabaseIfNotExist=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai username=changeme password=changeme outputChangeLogFile=src/main/resources/liquibase/changelog/init/changelog-data-init.xml diffTypes=data
Last Updated: October 24, 2023