Activiti工作流引擎启动提示表不存在解决方案

碰到问题

最近,在作者使用activiti工作流引擎的时候,发现启动时直接报错了这个错误 java.sql.SQLSyntaxErrorException: Table ‘xxx.act_ge_property’ doesn’t exist,我寻思不应该啊,我的库里确实没有这个表,但是activiti引擎会自动创建的啊,随着一步一步摸爬滚打(网上查资料),发现了问题原因。

环境

工作流引擎: activiti 7.1.0.M6
数据库 : mysql

找到原因

activiti引擎启动后,会去判断数据库中是否有和activiti相关的表(act_开头),如果没有则创建表。问题就是在查询有无相关表时,并不是查询当前选中的数据库,而是查询 mysql 的 INFORMATION_SCHEMA.TABLES表,这个表中存了所有数据库的表信息。言简意赅的说,原因就是当前mysql的其他库里有activiti相关表,所以activiti不会再创建,然而用的时候,它又在库中找不到对应表,所以报错了

参考文章:https://www.jianshu.com/p/48bf76856051/

解决方案

1.添加mysql连接配置(快速解决)

2.修改源码逻辑(麻烦,也是一种思路)


方案一 、添加mysql连接配置

在mysql连接里添加nullCatalogMeansCurrent=true
例:

url: jdbc:mysql://127.0.0.1:3306/testDB?nullCatalogMeansCurrent=true

方案二、修改源码逻辑


参考文章里有一个解决方案,就是删除其他库的相关表,方法是可行,但感觉这样不是每次都合适。所以作者痛定思痛去源码里找答案,想到它会判断有无存在相关表,那就在判断时做点手脚就可以了😏,思路就是这个思路,下面贴具体方法。


在package org.activiti.engine.impl.db包下的DbSqlSession中,可以看到在1039行有dbSchemaUpdate方法:
在这里插入图片描述

找到这两个方法,就好办了,我直接在方法里面打上断点,然后强制返回false,表示当前不存在,需要自动创建表,然后历史表和这个一样的操作,这样就可以不删除其他库里的相关表而自动创建了。嘿嘿。

在这里插入图片描述

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值