在 TiDB 数据库环境下使用choerodon-tool-liquibase执行groovy 脚本时会报出连接断开的错误。
liquibase.exception.LockException: liquibase.exception.UnexpectedLiquibaseException: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
根据报错信息发现问题是liquibase.lockservice.StandardLockService#init方法在数据库中生成的databasechangeloglock表中LOCKED为bit类型,liquibase.lockservice.StandardLockService#acquireLock方法在获取锁时会将该字段改为1,TiDB中bit类型更新为1时会发生错误2013 - Lost connection to MySQL server during query(应该是TiDB的BUG)。 在liquibase 官方文档中标注的LOCKED为int类型。但是代码并不是int类型,可以通过覆盖文件liquibase.sqlgenerator.core.CreateDatabaseChangeLogLockTableGenerator#generateSql修改字段类型来解决这个问题。