Springboot集成Flowable启动报错class cannot be cast to class 解决

时间:2025-04-20 07:21:21

版本

Flowable 6.7.2

Mysql-connector-java 8.0.27

现象

Mysql驱动升级到8.0.27时,SpringBoot启动项目报了如下错误:

: Error initialising eventregistry data model
...
Caused by: : class  cannot be cast to class  ( and  are in module  of loader ‘bootstrap’)
at (:328)

原因

Flowable 6.7.2 默认依赖liquibase-core:3.8.9。

liquibase通过查询数据库表变更日志检查是否需要更新表结构,由于数据库驱动版本较新,返回的数据日期格式为LocalDateTime,导致不兼容报错。

public List<RanChangeSet> getRanChangeSets() throws DatabaseException {
    ...
    // 此处tmpDateExecuted 为LocalDateTime导致报错
    Object tmpDateExecuted = ("DATEEXECUTED");
    Date dateExecuted = null;
    if (tmpDateExecuted instanceof Date) {
        dateExecuted = (Date)tmpDateExecuted;
    } else {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        try {
            dateExecuted = ((String)tmpDateExecuted);
        } catch (ParseException var24) {
        }
    }
	...
}

解决

方案1:mysql数据库驱动版本退回到8.0.22(注意:8.0.22版本有漏洞存在,故做升级
方案2:liquibase-core依赖版本升级到4.8.0以后的版本修复此问题

public List<RanChangeSet> getRanChangeSets() throws DatabaseException {
	...
	Object tmpDateExecuted = ("DATEEXECUTED");
    Date dateExecuted = null;
    if (tmpDateExecuted instanceof Date) {
        dateExecuted = (Date)tmpDateExecuted;
    } else if (tmpDateExecuted instanceof LocalDateTime) { // 增加了对LocalDateTime类型的处理
        dateExecuted = (((LocalDateTime)tmpDateExecuted).atZone(()).toInstant());
    } else {
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        try {
            dateExecuted = ((String)tmpDateExecuted);
        } catch (ParseException var26) {
        }
    }
	...
}

到此,重新启动项目可以正常起来了。