最近在开发过程中遇到了Flowable的一个坑,也算是mysql的一个坑。springboot 中使用Flowable的时候启动报错。

version mismatch: library version is '6.6.0.0', db version is 5.99.0.0 Hint: Set <property name="databaseSchemaUpdate" to value="true" or value="create-drop" (use create-drop for testing only!) in bean processEngineConfiguration in flowable.cfg.xml for ,

        先讲最终解决方案,如果报从错误中 包含 db version is 5.99.0.0,那么大概率跟碰到的情况一样,要么把mysql的表名改为全大写,要么设置mysql不区分大小写就能解决这个问题。

        想看细节的朋友可以继续往下看,不想看细节的朋友可以按照结论去排查看用这个方案有没有解决问题。

接下来先说一下经过。一个已经在运行中的项目(系统上线了)用了Flowable,现在有需求要改功能,要重新搭一套环境来做对应的开发,我按照生产的环境搭了一套,新安装了一套mysql8.0.23,数据库的结构,数据全部copy过来了。启动项目,始终报错,找到了错误的地方

网上各种搜这个报错怎么解决,都是说把数据库的act_ge_property表的数据改的和报错的那个一致,我检查了一下,数据本身就是6.6.00

 我就奇怪了,为什么非要说我的DB里面的版本是5.99.0.0呢。怎么弄都不对,最后打断点跟了源码才发现问题。

报错是从这来的,获取到的版本和当前包中定义的版本不一致就会报错。接下来就要看版本是怎么获取到的。

 从这串代码中就能看到,先从getProperty方法中获取,如果获取到的是空,就从getUpgradeStartVersion方法中获取。

先看看getProperty方法,这里先拿到了一个表名ACT_GE_PROPERTY,这张表是不是很熟悉,很多其他的帖子回复的解决版本不对的问题都是要去改这张表就是从这来的。请注意,表名是全大写的,如果你的数据库严格区分大小写,这里连表都找不到,肯定也找不到数据了,最后就会return null ,那么就走 getUpgradeStartVersion 的逻辑。而getUpgradeStartVersion直接返回5.99.0.0,那就出现最开头的,版本不一致的问题了。

 

 

 

 

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐