Activiti异常:There is no getter for property named 'limitBefore'完美解决!
There is no getter for property named 'limitBefore'
工作需求, 使用了activit工作流, 项目使用的是springboot(2.1.1.RELEASE)项目, 所以使用springboot对activit进行集成, 我是用了activit 5.23.0的版本进行集成, 集成如下:
导入activiti的依赖
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>5.23.0</version>
</dependency>
springboot yml文件进行配置
...
spring:
activiti:
database-schema-update: true
check-process-definitions: false
history-level: full
db-history-used: true
...
上面的配置说明很简单, 这里不多做赘述, 百度即可
然后就可以对activit进行开发和使用了, 开发和使用这里不做说明, 在开发和使用过程中, 发现activit工作流不时的就会报错, 异常信息如下:
...
...
Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'limitBefore' in 'class org.activiti.engine.impl.db.ListQueryParameterObject'
...
2021-06-02 14:04:03.291 [Thread-6] ERROR org.activiti.engine.impl.interceptor.CommandContext- Error while closing command context
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'limitBefore' in 'class org.activiti.engine.impl.db.ListQueryParameterObject'
### Cause: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'limitBefore' in 'class org.activiti.engine.impl.db.ListQueryParameterObject'
...
...
抛出异常堆栈信息很长, 这里只截取了一部分, 但是异常基本都是如上, 说是找不到limitBefore属性的getter方法? 一旦出现这个问题, 整个工作流就不好使了, 非常头疼, 就去百度了这个问题, 有人说只要重启即可, 于是重新启动, 发现问题的确好了, 但是过了一会又出现了这个问题, 感觉事情不妙, 继续百度, 一顿"猛如虎"的操作之后, 发现百度出来的没法解决这个异常, 于是FQ访问外网, 哎, 结果还是没有进展, 一度认为是activit版本和spingboot版本"不和谐"导致, 于是降低activiti版本, 改为了5.22.0, 测试还是有问题, 改为了5.18.0, 依然不行, 感觉不是版本问题, 这时候已经过去很长时间了(2天, 有空就找这个问题), 后来看到网上有关于activit的这样的配置:
async-executor-enabled: true
job-executor-activate: true
这些配置和job以及定时任务有关, 感觉和异常会有关系, 就改了yml配置如下:
...
spring:
activiti:
database-schema-update: true
check-process-definitions: false
history-level: full
db-history-used: true
async-executor-enabled: false
job-executor-activate: false
...
很可惜呀, 结果依然没有解决, 这时候感觉自己快要放弃了, 但是!车到山前必有路, 突然今天(2021/06/04), 在日志中发现, 每次抛出这个异常之前都会有一行不起眼的另外一个异常, 如下:
ERROR com.alibaba.druid.pool.DruidDataSource- init datasource error, url: jdbc:mysql://xxx.xx.xx.xx:33306/dev?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true
进一步发现, 报出ERROR com.alibaba.druid.pool.DruidDataSource之后会有一堆数据库连接异常, 然后跟着就是activit的limitbefore的异常了, 之前也见过这些异常, 以为数据库不稳定而已, 但今天就不这么想了, 一瞬间脑子闪过, 是不是因为数据库有问题导致的呢, 于是转向数据库方面, 查询了这个异常, 发现导致这样的问题有很多原因, 但是有一个原因让我很在意, 就是MySQL(本项目用的是MySQL数据库)驱动版本和数据库版本的问题, 我就看看项目的配置, 果然! MySQL的驱动是8.0.13版本的, 但是数据库的版本通过select version()看到是5.7.21, 明显8.0版本和5.0版本, 跟网上部分说明一致, 版本"不和谐", 会出问题!
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
没有配置
数据库版本如下:
决定试一下, 改成"和谐"版本, 于是改掉MySQL驱动的版本, 改为5.1.38的版本, 自己加上
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
yml文件数据库驱动的配置也要改, 原来是
com.mysql.jc.jdbc.Driver
数据库降低版本, 驱动改为如下:
com.mysql.jdbc.Driver
至于上面两种配置的区别, 依然不多说, 就是和驱动jar的版本有关系, 网上讲解详细, 不难理解.
抱着试一试的态度, 更新系统, 从1点开始, 到现在截止(16:00), 没有再出现LimitBefore这个问题了, 如果会出现, 按照之前的时间, 不会这么久, 所以感觉这个问题已经得到解决了, 最近也会持续关注日志还会不会有这个问题, 如果这个帖子存在, 那么就说明我没有在看到这个异常了, 写给碰到相同问题的人~~~~~~~