执行 Liquibase:3 个用例

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

创建 数据库更改日志文件 后,运行它的最佳方式是什么?与往常一样,这取决于最适合您的方法。运行 Liquibase 的方式主要有三种:“启动时自动”、“根据需要手动”或“只要给我 SQL,我就会自己做”。这三种方法都适用于任何更改日志文件,因此请使用最适合您的项目的方法(或方法组合)。

自动部署

运行 Liquibase 的最简单方法是将其设置为在启动时自动运行。设置完成后,您的数据库状态将始终与您的代码所期望的相匹配,并且您无需忘记任何手动步骤。此方法最适用于您对部署过程的控制较少或者您想要更简单的部署过程的环境。

我已经看到这种方法用于使用持续交付的 Web 应用程序,并且具有从代码签入到每天执行多次的实时生产的自动发布过程。我还看到这种方法用于交付给客户的打包应用程序中,以使数据库管理部分完全透明。

如果您有多个服务器指向同一个数据库,请不要担心。 Liquibase 使用 DATABASECHANGELOGLOCK 表来确保一次只有一个 Liquibase 实例运行。即使你有一个服务器集群,所有服务器同时上线并且都自动运行 Liquibase,锁定表将确保它们不会同时尝试更新数据库并导致问题。

Liquibase 附带两个钩子以在启动时自动更新您的数据库:一个 servlet 侦听器 和一个 Spring bean

如果这些挂钩都不适合您的应用程序,您始终可以直接调用 Liquibase Java API。直接运行 Liquibase 最直接的方式如下所示:


 java.sql.Connection connection = openConnection(); //your openConnection logic here

Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection))

Liquibase liquibase = new liquibase.Liquibase("path/to/changelog.xml", new ClassLoaderResourceAccessor(), database);

liquibase.update(new Contexts(), new LabelExpression());


此代码将创建 liquibase.Liquibase façade 的实例并运行 update() 方法,该方法仅更新数据库以匹配传递的变更日志。如果您希望以不同方式自动化 Liquibase,Liquibase 外观上还有许多其他方法,也可以使用这些方法。

手动部署

如果自动数据库更新不适合您,您可以按需执行 Liquibase。 Liquibase 附带一个同时支持 Windows 和 Linux 的 命令行应用程序 。它还为那些使用这些工具的人提供了一个 Ant 任务 和一个 Maven 目标 。这些接口允许您在需要时随时执行 Liquibase 命令,而无需依赖于应用程序启动。

Ant 和/或 Maven 接口的一种常见用途是将 Liquibase 集成到您的构建过程中。这使您可以更早地捕获更改日志中的错误,并且还为您提供了一个可以运行自动化测试的数据库。开发人员可以针对其本地环境运行相同的任务以进行初始开发和修复问题。请记住: 上下文 非常适合将测试数据嵌​​入到您的变更日志中,并且仅将其部署到测试环境中。

您可能还更喜欢直接运行 Liquibase,使用旨在消除停机时间的更复杂的发布流程。例如,如果您使数据库更改与现有代码库兼容(无 DROP 命令),则可以在旧版本站点仍在运行时运行 Liquibase 更新。成功更新后,开始在集群中分阶段推出新代码。

执行 SQL

使用 Liquibase 手动更新允许您控制何时更新数据库,但实际执行的内容仍然完全由 Liquibase 管理。对于那些需要确切了解对他们的数据库做了什么的人,Liquibase 在命令行、Ant 和 Maven 界面中支持“updateSQL”模式。运行 updateSQL 时,Liquibase 将简单地输出它通常会运行的 SQL。输出包括更新数据库的 SQL 和使 DATABASECHANGELOG 表保持最新的 SQL。根据需要检查输出,然后通过您喜欢的任何数据库工具执行它。运行 SQL 后,您的数据库将处于正确状态,并且 Liquibase 将知道运行了什么,因此未来的 updateSQL 调用将仅包含新的变更集。

连连看

上述所有方法也可以根据需要进行混合和匹配,以处理您可能拥有的任何模式管理需求。一些项目使用自动部署进行开发和初始 QA,然后使用 updateSQL 进行最终 QA 和生产。一些发货的产品在启动时自动运行 Liquibase,但修补程序是通过更手动的过程处理的。其他人在整个生产过程中一直自动运行 Liquibase,但执行的 SQL 会自动保存并在整个发布过程中由 DBA 进行监视,以确保没有意外发生。

无论您的模式部署需求是什么,您都应该能够找到一种使用 Liquibase 来管理它们的方法。