项目环境

  • Maven构建
  • 数据库:Orcle12c
  • 服务器:Tomcat9
  • <java.version>1.8</java.version>
  • <activiti.version>6.0.0</activiti.version>
  • <springframework.version>5.0.4.RELEASE</springframework.version>
  • <mybatis.version>3.4.5</mybatis.version>

问题

问题一:java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.exc.InvalidDefinitionException

  • 出现原因:Jackson和Spring版本不兼容问题,activiti6中自带的Jackson版本是2.7.5,和spring5不兼容,Jackson版本过低
  • 解决思路:查询pom中是否存在jacksonjar包引用,如果存在则在pom的activiti引用中排除jackson的jar包引用
  • 解决步骤
    • 查看pom引用jar,如下图所示,点击4——>使用3搜索,可以看见activiti-engine下依赖很多jackson的低版本的jar。2.7.5版本和Spring5一定不兼容

                            图一

    • 在pom的activiti-engine下排除关于jackson的引用,如下

      <!-- activiti-engine-->
      <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-engine</artifactId>
      <version>${activiti.version}</version>
      <exclusions>
      <exclusion>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      </exclusion>
      <exclusion>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      </exclusion>
      </exclusions>
      </dependency>

      如果找不到相关的<groupId>和<artifactId>,可以双击图一中的标记2(也就是相关的依赖jar),将会进入到如下界面,找到相关的<groupId>和<artifactId>

    • 重新引入高版本Jackson
      <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
      <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.5</version>
      </dependency>
      <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
      <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.5</version>
      </dependency>
    • 强制更新maven项目,解决问题

问题二:Could not open ServletContext resource [diagrams/test.bpmn]

  • 出现原因:在项目启动时自送部署流程的相关配置路径问题,如下图

  • 解决办法:在路径前面加上classpath:  ,代表在当前资源文件路径下查找
    • 如下图,修改自动部署流程路径

问题三:No qualifying bean of type 'org.activiti.engine.ProcessEngine' is defined

  • 问题场景

    • 我的activiti.cfg.xml中配置如下

      <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
      <!-- 配置数据源,和系统使用同一个数据源-->
      <property name="dataSource" ref="dataSource" />
      <property name="databaseSchemaUpdate" value="true" />
      <!-- 统一的事务管理 -->
      <property name="transactionManager" ref="transactionManager" />
      <property name="activityFontName" value="宋体" />
      <property name="labelFontName" value="宋体" />
      <property name="deploymentResources">
      <list>
      <value>classpath:diagrams/test.bpmn</value>
      </list>
      </property>
      <property name="beans">
      <map>
      <entry key="myService" value-ref="myService" />
      </map>
      </property>
      </bean> <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
      <property name="processEngineConfiguration" ref="processEngineConfiguration" />
      </bean>
    • Java类中注入方法如下
      @Autowired
      @Qualifier
      private ProcessEngine processEngine;
    • 报错信息如下图

  • 问题原因
    • 在配置文件中,注入的类是org.activiti.spring.ProcessEngineFactoryBean,而在Java中自动注入的实体Bean则是org.activiti.engine.ProcessEngine,两者类型不匹配
    • 注解@Autowired默认是按照Bean类型来匹配,而org.activiti.engine.ProcessEngine根本就没有配置注入,所以报错
  • 解决办法
    • 修改匹配模式为名称匹配,将注解@Qualifier修改为@Qualifier(value="processEngine")
    • 虽然两者类型不一样,但是Spring 会自动将org.activiti.spring.ProcessEngineFactoryBean强转成org.activiti.engine.ProcessEngine注入

SSM集成activiti6.0错误集锦(一)的更多相关文章

  1. SSM集成activiti6.0错误集锦(二)

    项目环境 Maven构建 数据库:Orcle12c 服务器:Tomcat9 <java.version>1.8</java.version> <activiti.vers ...

  2. springboot集成activiti6.0多数据源的配置

    最近公司开始开发springboot的项目,需要对工作流进行集成.目前activiti已经发布了7.0的版本,但是考虑到6.0版本还是比较新而且稳定的,决定还是选择activiti6.0的版本进行集成 ...

  3. django 2.0 xadmin 错误集锦

    转载 django 2.0 xadmin 错误集锦 2018-03-26 10:39:18 Snail0Li 阅读数 5188更多 分类专栏: python   1.django2.0把from dj ...

  4. ssm集成redis

    身在一个传统的IT公司,接触的新技术比较少,打算年后跳槽,所以抽空学了一下redis. 简单的redis测试,咱们这边就不讲了,现在主要讲讲ssm集成redis的过程,因为现在项目用的就是ssm的框架 ...

  5. Activiti工作流框架学习笔记(二)之springboot2.0整合工作流Activiti6.0

    以前在工作当中做过不少与工作流Activiti有关的工作,当时都是spring集成activiti5.22的项目,现在回过头去看,其实版本已经稍微老了,因此,基于先前的工作经验,决定用较新版本的技术来 ...

  6. Activiti6.0 安装出错 log4j:ERROR setFile(null,true) call failed.

    由于要选择一款合适的流程引擎,需要在jbpm和Activiti之间做对比,我这边负责Activiti的测试. 看到Activiti官网(http://www.activiti.org/download ...

  7. SVN下错误集锦

    SVN下错误集锦 一SVN下的文件被locked不能update和commit 最近做项目的时候,遇到这个问题,SVN下的文件被locked不能update和commit.其提示如下: 解决办法:执行 ...

  8. (转)Hadoop之常见错误集锦

     Hadoop之常见错误集锦            下文中没有特殊说明,环境都是CentOS下Hadoop 2.2.0.1.伪分布模式下执行start-dfs.sh脚本启动HDFS时出现如下错误:   ...

  9. 在Hadoop 2.3上运行C++程序各种疑难杂症(Hadoop Pipes选择、错误集锦、Hadoop2.3编译等)

    首记 感觉Hadoop是一个坑,打着大数据最佳解决方案的旗帜到处坑害良民.记得以前看过一篇文章,说1TB以下的数据就不要用Hadoop了,体现不 出太大的优势,有时候反而会成为累赘.因此Hadoop的 ...

随机推荐

  1. 如何用vue组件做个机器人?有趣味的代码

      <!DOCTYPE html> <html lang="en"> <div>     <meta charset="UTF- ...

  2. Docker下操作指令

    Docker下操作指令 以mysql为例 1.搜索镜像: #docker search mysql 2.拉取镜像 #docker pull mysql:5.7 3.加载镜像并绑定端口: #docker ...

  3. oracle中ddl的管理

    因为某些原因,Oracle的ddl权限不能开放给用户. 之前采取的方式是,创建用户的时候不为其赋予create table 的权限. 但是在使用过程中发现该用户还是拥有alter table的权限. ...

  4. HDU 6300

    Problem Description Chiaki has 3n points p1,p2,…,p3n. It is guaranteed that no three points are coll ...

  5. [C#]Socket通信BeginReceive异步接收数据何时回调Callback

    原文地址:http://www.cnblogs.com/wangtonghui/p/3277303.html 最近在做服务器压力测试程序. 接触了一段时间Socket异步通讯,发现自己对BeginRe ...

  6. Rower Bo (高数 + 物理)

    #include<bits/stdc++.h> #define esp (1e-5) using namespace std; int main(){ int a; double v1, ...

  7. libvirt_python

    一.Connections 连接函数接口libvirt.open(name); //可读写方式连接上QEMU 参数说明: name:连接名称libvirt.openAuth(uri, auth, fl ...

  8. 20165316 实验四 Android程序设计

    20165316 孙勖哲 第四次实验 Android 程序设计1 参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECANDROID, 安装 Andr ...

  9. python--表达式(运算表达式)

    运算表达式 python 的表达式包括:算术运算符,赋值运算符,比较运算符,成员运算符 算术运算符 运算符 描述 + 加 - 两个对象相加 - 减 - 得到负数或是一个数减去另一个数 * 乘 - 两个 ...

  10. 详解:PHP加速器配置神器opcache

    什么是opcode? 当解释器完成对脚本代码的分析后,便将它们生成可以直接运行的中间代码,也称为操作码(Operate Code,opcode).Opcode cache的目地是避免重复编译,减少CP ...