部署Flowable的war包到Tomcat9启动时报PUBLIC.ACT_DE_DATABASECHANGELOGLOCK错误
Flowable启动等待changelog锁问题原因
你遇到的报错日志如下:
SELECT LOCKED FROM PUBLIC.ACT_DE_DATABASECHANGELOGLOCK WHERE ID=1
2021-08-13 20:45:05.818 INFO 8316 --- [ main] l.lockservice.StandardLockService : Waiting for changelog lock.
该报错是Flowable集成的Liquibase数据库版本管控组件的锁机制异常导致的,具体触发原因如下:
- 前次服务异常终止遗留未释放的锁
Liquibase执行数据库表结构变更时会先在ACT_DE_DATABASECHANGELOGLOCK表中将LOCKED字段置为true加锁,变更完成后再回写为false释放锁。如果前次启动过程中服务被强制中断、进程被杀、服务器断电,锁没有被正常释放,后续启动就会一直等待锁释放。 - 多应用并发访问默认内置H2数据库冲突
未修改配置的情况下Flowable默认使用内置H2数据库存储数据,同时部署flowable-ui.war和flowable-rest.war两个应用的前提下,两个服务会同时争抢同一个H2数据库的变更锁,互相阻塞无法获取锁,最终导致服务退出。 - 数据库账号权限不足
如果你修改了配置使用外置关系型数据库(如MySQL、PostgreSQL等),配置的数据库账号没有ACT_DE_DATABASECHANGELOGLOCK表的写入、更新权限,Liquibase无法更新锁状态,也会持续打印等待锁的日志。 - 低版本Flowable锁超时机制缺失
部分旧版本Flowable没有配置Liquibase锁的超时时间,锁被占用后不会主动检测锁是否过期、也不会触发抢占逻辑,会无限等待锁释放最终导致服务启动失败。
内容的提问来源于stack exchange,提问作者Gagan K.N.
相关产品推荐
相关产品推荐

