Liquibase Maven Plugin如何增加changelog锁等待时长
Liquibase changelog锁等待时长配置方法
你需要调整的核心参数是lockWaitTimeInMinutes,该参数默认值为5,单位为分钟,用于控制当前实例抢占数据库changelog锁的最长等待时间,超时后会直接抛出异常终止执行。针对你当前使用Liquibase Maven插件执行变更的场景,有两种配置方式:
- 方式1:固定配置在pom.xml插件声明中
直接在Liquibase Maven插件的configuration节点下添加对应参数即可,配置示例:<plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>你当前使用的Liquibase版本号</version> <configuration> <!-- 保留你原有的数据库连接、changelog路径等已有配置 --> <url>jdbc:你的数据库连接地址</url> <username>数据库用户名</username> <password>数据库密码</password> <changeLogFile>classpath:db/changelog/master.xml</changeLogFile> <!-- 按需设置等待时长,比如设置为30即最长等待30分钟 --> <lockWaitTimeInMinutes>30</lockWaitTimeInMinutes> </configuration> </plugin> - 方式2:执行Maven命令时动态传参
如果不想修改pom文件,也可以在执行更新命令时通过-D参数传入配置,示例命令:mvn liquibase:update -Dliquibase.lockWaitTimeInMinutes=30
如果你后续切换为Spring Boot启动时自动执行Liquibase变更的模式,直接在应用配置文件中添加对应参数即可,yaml配置示例:
spring: liquibase: lock-wait-time-in-minutes: 30
配置提醒:不要无限制调大该参数值。如果频繁出现锁超时,优先排查两个问题:一是体量过大的变更脚本是否可以拆分为多批次执行,缩短单次锁持有时间;二是是否有历史执行异常退出导致的残留锁未释放,出现残留锁时可以直接执行SQL手动释放,无需等待超时:
UPDATE DATABASECHANGELOGLOCK SET LOCKED=0, LOCKGRANTED=NULL, LOCKEDBY=NULL WHERE ID=1;
内容的提问来源于stack exchange,提问作者Heschoon
相关产品推荐
相关产品推荐

