项目场景:
之前自己写的系统订单流程功能不够用,于是打算用用Activiti7,结果引入后就报错
问题描述:
环境:springboot@2.3.1 + shiro@1.7 + mybatis-plus@3.3.2
本次新增引入activiti-spring-boot-starter@7.1.0.M4 + activiti-bpmn-layout
(听说M6版本有强引入Spring Security,M5有其他BUG,这里为了避免麻烦就用的M4,但估计后续还有更多坑要填)
pom.xml新增如下:
<properties>
<activiti.version>7.1.0.M4</activiti.version>
</properties>
.....
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>${activiti.version}</version>
</dependency>
<!--自动化生成流程 -->
<!-- https://mvnrepository.com/artifact/org.activiti/activiti-bpmn-layout -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-layout</artifactId>
<version>${activiti.version}</version>
</dependency>
结果还没加Activiti相关的运行代码,DEBUG一次就开始报错了,mybatis扫描Mapper出错:No typehandler found for property logTime
原因分析:
一开始先排查了一下相关类的映射类型/字段/包名引入,没发现问题但是依旧报错,报错相关的属性logTime是LocalDateTime类型,但TIMESTAMP是可以正常映射的,其他类也同样是使用LocalDateTime没遇到过问题
后面听交流群的老哥说把LocalDateTime改成Date试一下,发现报错信息变了:
这里看报错信息内有mybatis的不同版本存在,推测是和mybatis-plus的引入冲突,后面注释掉之前引入的Activiti-spring-boot-starter可以正常运行,原本代码是没有问题,那只能是这个原因了
解决方案:
既然是Mybatis的重复引入冲突,那就去掉一个就好了,因为Mybatis-Plus有旧代码的依赖在,为保证稳定性,就排除掉新引入的Activiti-spring-boot-starter中的Mybatis。将pom.xml相关的代码改成以下就完成了
<properties>
<activiti.version>7.1.0.M4</activiti.version>
</properties>
.....
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter</artifactId>
<version>${activiti.version}</version>
<!-- mybatis-plus引用冲突,需要排除-->
<exclusions>
<exclusion>
<artifactId>mybatis</artifactId>
<groupId>org.mybatis</groupId>
</exclusion>
</exclusions>
</dependency>
<!--自动化生成流程 -->
<!-- https://mvnrepository.com/artifact/org.activiti/activiti-bpmn-layout -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-layout</artifactId>
<version>${activiti.version}</version>
</dependency>