流程引擎 Flowable/Activiti 无法启动报错:liquibase - Waiting for changelog lock....
2024年12月09日 20:45:20 · 本文共 1,315 字阅读时间约 4分钟 · 121 次浏览如果你使用流程引擎 Flowable/Activiti,并且在程序启动时卡住,报错:liquibase - Waiting for changelog lock....,说明有数据库表没有释放锁,这里锁并不是数据库级别的锁表,所以你无法查询到被锁的表,这里的锁是逻辑上的锁。
解决方案
你需要检查以下数据库表,查询语句如下,主要看locked字段如果是1,那么说明锁是生效的状态:
SELECT locked FROM act_app_databasechangeloglock;
SELECT locked FROM act_cmmn_databasechangeloglock;
SELECT locked FROM act_co_databasechangeloglock;
SELECT locked FROM act_dmn_databasechangeloglock;
SELECT locked FROM act_fo_databasechangeloglock;
SELECT locked FROM flw_ev_databasechangeloglock;
解锁只需要修改这个状态值,我这里提供一个解锁模板,请根据你的实际情况修改:
UPDATE act_app_databasechangeloglock SET locked = 0, lockgranted = NULL, lockedby = NULL WHERE id = 1;
UPDATE act_cmmn_databasechangeloglock SET locked = 0, lockgranted = NULL, lockedby = NULL WHERE id = 1;
UPDATE act_co_databasechangeloglock SET locked = 0, lockgranted = NULL, lockedby = NULL WHERE id = 1;
UPDATE act_dmn_databasechangeloglock SET locked = 0, lockgranted = NULL, lockedby = NULL WHERE id = 1;
UPDATE act_fo_databasechangeloglock SET locked = 0, lockgranted = NULL, lockedby = NULL WHERE id = 1;
UPDATE flw_ev_databasechangeloglock SET locked = 0, lockgranted = NULL, lockedby = NULL WHERE id = 1;
如果你只想解决问题,到此为止即可,下面我们探索一下原理。
调查原理
其实,这是触发了 liqiubase 的数据库版本控制。LiquiBase 是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,然后执行日志文件中的修改,将数据库更新或回滚到一致的状态。
DATABASECHANGELOGLOCK 表,用于控制 Liquibase 在应用变更时的并发访问。当 Liquibase 应用变更时,它会自动在表中创建一行记录,防止其他进程或线程同时修改数据库。当变更应用完成后,Liquibase 会删除这个表格中的记录,以允许其他进程或线程修改数据库。
如果我们强制程序退出,比如 kill -9 杀死了进程,或者在本地 Debug 运行时双击了停止按钮,都会造成进程强制退出,此时如果正好数据库表正在执行变更,这个锁没有来得及删除,就会造成锁一直存在,下次启动时一直在等待锁的释放。
综上所属,我们在退出程序时,还是最好等待程序自己完全执行完毕再退出,强制杀死进程可能会导致一些奇怪的问题出现。
商业用途请联系作者获得授权。
版权声明:本文为博主「任霏」原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.renfei.net/posts/1626402130325676121
版权声明:本文为博主「任霏」原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.renfei.net/posts/1626402130325676121
相关推荐
猜你还喜欢这些内容,不妨试试阅读一下
评论与留言
以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。
热评文章
- 前后端分离项目接口数据加密的秘钥交换逻辑(RSA、AES)
- OmniGraffle 激活/破解 密钥/密匙/Key/License
- Redis 未授权访问漏洞分析 cleanfda 脚本复现漏洞挖矿
- CleanMyMac X 破解版 [TNT] 4.6.0
- OmniPlan 激活/破解 密钥/密匙/Key/License
- 人大金仓 KingbaseES V8 R3 安装包、驱动包和 License 下载地址
- Parallels Desktop For Mac 16.0.1.48911 破解版 [TNT]
- Parallels Desktop For Mac 15.1.4.47270 破解版 [TNT]
- Sound Control 破解版 2.4.2
- CleanMyMac X 破解版 [TNT] 4.6.5
热文排行
- 博客完全迁移上阿里云,我所使用的阿里云架构
- 微软确认Windows 10存在bug 部分电脑升级后被冻结
- 大佬们在说的AQS,到底啥是个AQS(AbstractQueuedSynchronizer)同步队列
- 比特币(BTC)钱包客户端区块链数据同步慢,区块链数据离线下载
- Java中说的CAS(compare and swap)是个啥
- 小心免费主题!那些WordPress主题后门,一招拥有管理员权限
- 强烈谴责[wamae.win]恶意反向代理我站并篡改我站网页
- 讨论下Java中的volatile和JMM(Java Memory Model)Java内存模型
- 新版个人网站 NEILREN4J 上线并开源程序源码
- 我站近期遭受到恶意不友好访问攻击公告