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>

沒有配置 , 默認繼承的spingboot的版本, 查到版本是8.0.13


數據庫版本如下:

決定試一下, 改成"和諧"版本, 於是改掉MySQL驅動的版本, 改為5.1.38的版本, 自己加上 , 覆蓋springboot自己的版本

<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這個問題了, 如果會出現, 按照之前的時間, 不會這么久, 所以感覺這個問題已經得到解決了, 最近也會持續關注日志還會不會有這個問題, 如果這個帖子存在, 那么就說明我沒有在看到這個異常了, 寫給碰到相同問題的人~~~~~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM