启动flowable的时候遇到了这个问题:Waiting for changelog lock....

第一种方式:全网搜索,包括stack overflow,结果都是修改databasechangeloglock表的locked字段为0
第二种方式:如果没有databasechangeloglock表就把所有带lock关键字的表都打开把locked改为0
但是到我这里明明locked都为0为什么还是不生效呢?
在我检查databasechangeloglock表属性的时候发现问题可能出在locked这个字段的数据类型上,我的数据库是mysql中间件用的mybatis-plus。

以前遇到过一起类似的案例,bit数据类型被读取到java里以后没有默认转换成Boolean类型,就是说0 != false。一般这种问题都是数据库连接的url上设置一下就可以了:
transformedBitIsBoolean=true
加上一些其他属性,具体可以参考相关文档,以下是完整连接
url: jdbc:mysql://[数据库ip地址]:[端口号]/[数据库]?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true但是,我的url设置很完整,所以我的问题没有得到解决,到这里变的一筹莫展,只好先放下不管了。大概过了两天,我在调试数据库读写分离的时候看到了mycat的配置。也就是说我的所有url都被mycat代理了,原先的url设置已经不生效了。

修改如下

完整url如下,注意【&】符号用【&】替换了,数据库也不在url中填写而是写到user属性中:
jdbc:mysql://[ip地址]:[端口号]?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true更新,原先的bit数据类型也会造成读取问题,所以我在数据库里把数据类型改成了tinyint(1)

在启动Flowable时遇到'Waiting for changelog lock....'错误。解决方案包括修改databasechangeloglock表的locked字段为0,或者检查数据库中locked字段的数据类型。在MySQL+Mybatis-Plus环境中,bit类型数据可能未正确转换为Boolean,可通过在数据库连接URL设置transformedBitIsBoolean=true来解决此类问题。
655





