`
357029540
  • 浏览: 735608 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

SpringBoot+Activiti的serviceTask注入异常问题

阅读更多

       在使用springboot+activiti的serviceTask过程中,通过activiti:delegateExpression的代理方式注入bean,如${serviceTaskService}的时候,在实现@Service注解而没有指定注解值的时候将会出现以下异常

org.activiti.engine.ActivitiException: Unknown property used in expression: ${serviceTaskService}
	at org.activiti.engine.impl.bpmn.behavior.ServiceTaskDelegateExpressionActivityBehavior.execute(ServiceTaskDelegateExpressionActivityBehavior.java:119) ~[activiti-engine-6.0.0.jar:6.0.0]
	at org.activiti.engine.impl.agenda.ContinueProcessOperation.executeActivityBehavior(ContinueProcessOperation.java:180) ~[activiti-engine-6.0.0.jar:6.0.0]
	at org.activiti.engine.impl.agenda.ContinueProcessOperation.executeSynchronous(ContinueProcessOperation.java:131) ~[activiti-engine-6.0.0.jar:6.0.0]
	at org.activiti.engine.impl.agenda.ContinueProcessOperation.continueThroughFlowNode(ContinueProcessOperation.java:89) ~[activiti-engine-6.0.0.jar:6.0.0]
	at org.activiti.engine.impl.agenda.ContinueProcessOperation.run(ContinueProcessOperation.java:55) ~[activiti-engine-6.0.0.jar:6.0.0]
	at org.activiti.engine.impl.interceptor.CommandInvoker.executeOperation(CommandInvoker.java:73) ~[activiti-engine-6.0.0.jar:6.0.0]
	at org.activiti.engine.impl.interceptor.CommandInvoker.executeOperations(CommandInvoker.java:57) ~[activiti-engine-6.0.0.jar:6.0.0]
	at org.activiti.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:42) ~[activiti-engine-6.0.0.jar:6.0.0]
	at org.activiti.engine.impl.interceptor.TransactionContextInterceptor.execute(TransactionContextInterceptor.java:48) ~[activiti-engine-6.0.0.jar:6.0.0]
	at org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:63) ~[activiti-engine-6.0.0.jar:6.0.0]
	at org.activiti.spring.SpringTransactionInterceptor$1.doInTransaction(SpringTransactionInterceptor.java:47) [activiti-spring-6.0.0.jar:6.0.0]
	at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133) [spring-tx-4.3.18.RELEASE.jar:4.3.18.RELEASE]
	at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:45) [activiti-spring-6.0.0.jar:6.0.0]
	at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:29) [activiti-engine-6.0.0.jar:6.0.0]
	at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:44) [activiti-engine-6.0.0.jar:6.0.0]
	at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:39) [activiti-engine-6.0.0.jar:6.0.0]
	at org.activiti.engine.impl.RuntimeServiceImpl.startProcessInstanceByKey(RuntimeServiceImpl.java:82) [activiti-engine-6.0.0.jar:6.0.0]
	at com.activiti.service.impl.OverTimerServiceImpl.startWorkFlow(OverTimerServiceImpl.java:29) [classes/:na]

          刚开始的时候一直没有找到问题的原因,通过慢慢摸索原来只需要把注解@Servcie修改为@Service(value="serviceTaskService")即给该注解添加值就可以了,这是一个相当郁闷的事情,因为spring通常会自动的按照接口类来默认给注解取值,但是在activiti的serviceTask通过代理的时候就出问题了,这可能跟activiti的代码实现由关,没有实现初始缓存的原因,所以调用的时候就出问题了。下面贴下代码

 

serviceTest.bpmn20.xml:

 

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://activiti.org/test">
  <process id="serviceTest" name="serviceTest" isExecutable="true">
    <endEvent id="end" name="end"/>
    <sequenceFlow sourceRef="start" targetRef="task1" id="start-task1"/>
    <sequenceFlow sourceRef="task1" targetRef="task2" id="task1-task2"/>
    <sequenceFlow sourceRef="task2" targetRef="end" id="task2-end"/>
    <serviceTask id="task1" name="任务1" activiti:delegateExpression="${serviceTaskService}"/>
    <serviceTask id="task2" name="任务2" activiti:delegateExpression="${serviceTaskService}"/>

    <startEvent id="start" name="start"/>
  </process>
  <bpmndi:BPMNDiagram>
    <bpmndi:BPMNPlane>
      <bpmndi:BPMNShape bpmnElement="start">
        <omgdc:Bounds height="48.0" width="51.0" x="-12.0" y="-4.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="task1">
        <omgdc:Bounds height="64.0" width="84.0" x="159.0" y="-10.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="end">
        <omgdc:Bounds height="51.0" width="56.0" x="450.0" y="3.0"/>
      </bpmndi:BPMNShape>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
  <bpmndi:BPMNDiagram>
    <bpmndi:BPMNPlane>
      <bpmndi:BPMNShape bpmnElement="task2">
        <omgdc:Bounds height="71.0" width="83.0" x="427.0" y="55.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="end">
        <omgdc:Bounds height="48.0" width="48.0" x="660.0" y="68.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="task1">
        <omgdc:Bounds height="48.0" width="120.0" x="210.0" y="65.0"/>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="start">
        <omgdc:Bounds height="48.0" width="48.0" x="39.0" y="61.0"/>
      </bpmndi:BPMNShape>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>

 

 

ServiceTaskService接口:

import org.activiti.engine.delegate.JavaDelegate;

/**
 * @version 1.0
 * @date 2018/7/12
 * @description
 */
public interface ServiceTaskService extends JavaDelegate {

}

 

ServiceTaskServiceImpl实现类:

import com.activiti.service.ServiceTaskService;
import org.activiti.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Service;

/**
 * @version 1.0
 * @date 2018/7/12
 * @description
 */
@Service(value = "serviceTaskService")
public class ServiceTaskServiceImpl implements ServiceTaskService {

    @Override
    public void execute(DelegateExecution delegateExecution) {
        System.out.println("当前节点:" + delegateExecution.getCurrentFlowElement().getName());
    }
}

 controller启动类:

package com.activiti.service.impl;

import org.activiti.engine.RuntimeService;
import org.activiti.engine.runtime.ProcessInstance;
import org.springframework.transaction.annotation.Transactional;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.bind.annotation.GetMapping;
import javax.annotation.Resource;
import java.util.Optional;

/**
 * @version 1.0
 * @date 2018/7/10
 * @description
 */
@RestController
public class ServiceTaskController {

    @Resource
    private RuntimeService runtimeService;

    @Transactional(rollbackFor = Exception.class)
   @GetMapping(value = "/startWorkflow")
    public boolean startWorkflow(@RequestParam(value = "workFlowName")String workFlowName) {
        // 通过流程定义的key启动,选取最高的version启动
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(workFlowName);
        if (Optional.ofNullable(processInstance).isPresent()
                && processInstance.getProcessInstanceId().length() > 0) {
            return true;
        }
        return false;
    }

}

 maven配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.test</groupId>
    <artifactId>test_springboot_activiti</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.14.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter-basic</artifactId>
            <version>6.0.0</version>
        </dependency>

        <!--<dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti5-engine</artifactId>
            <version>6.0.0</version>
        </dependency>-->

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--HikariCP数据连接池 -->
        <dependency>
            <groupId>com.zaxxer</groupId>
            <artifactId>HikariCP</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

 更多例子可以参考https://github.com/422518490/test_springboot_activiti

0
0
分享到:
评论

相关推荐

    springboot+activiti集成Demo

    7. **服务调用与业务逻辑**: 通过`ServiceTask`元素,Activiti可以与Spring的服务层交互,实现业务逻辑。在SpringBoot环境中,这些服务通常是通过注解驱动的,例如`@Autowired`和`@Service`。 8. **日志与监控**: ...

    springboot+activiti+vue+thymleaf 版本

    标题中的“springboot+activiti+vue+thymleaf 版本”指的是一个基于Spring Boot、Activiti、Vue.js和Thymeleaf的综合工作流管理系统。这个系统结合了四个关键的技术栈,构建了一个功能丰富的业务流程自动化平台。 1...

    idea +springboot + activiti 请假实例源码

    【标题】:“idea +springboot + activiti 请假实例源码” 这个项目是基于IntelliJ IDEA(IntelliJ IDEA简称Idea,是一款流行的Java开发IDE)、Spring Boot和Activiti的工作流程管理系统的简单实例,主要展示了如何在...

    springboot+activiti7 入门小demo

    首先,让我们从标题"springboot+activiti7 入门小demo"开始,这个标题暗示了这是一个基于Spring Boot的小型项目,旨在帮助初学者理解如何集成和使用Activiti 7。Spring Boot以其"开箱即用"的特性,简化了Java应用的...

    springboot+Activiti .zip

    1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 3. 岗位管理:配置系统用户所属担任职务。...集成activiti5.22

    1.使用IDEA对springboot+activiti开发demo和详细讲解

    1.使用IDEA对springboot+activiti开发demo和详细讲解, 1.使用IDEA对springboot+activiti开发demo和详细讲解 1.使用IDEA对springboot+activiti开发demo和详细讲解 1.使用IDEA对springboot+activiti开发demo和详细...

    基于Springboot +activiti实现的一个前后端分离的企业级OA管理系统(源码+数据库)

    基于Springboot +activiti实现的一个企业级OA管理系统(源码+数据库),项目经过测试,可完美运行!相关说明: ## 1. 库 &gt; 1. SpringBoot Web库 &gt; 2. Activiti 工作流库 &gt; 3. freemarker 模板 &gt; 4. rapid-core 扩展...

    springboot2+activiti 7 -- maven工程依赖配置和创建表结构

    2. **ArtifactId**: 项目ID,例如`activiti-springboot-sample`。 3. **Version**: 使用Spring Boot的最新稳定版本,如`2.x.x.RELEASE`。 4. **Packaging**: 选择`jar`,生成可执行的JAR文件。 5. **Java Version**:...

    SpringBoot整合Activiti7的实现代码

    Activiti7发布正式版之后,它与SpringBoot2.x已经完全支持整合开发。我们可以将Activiti7与SpringBoot整合开发的坐标引入到工程中,从而达到SpringBoot支持Activti7整合。 1.使用IDEA创建SpringBoot项目 在工程的...

    使用IDEA对springboot+activiti开发demo和详细讲解

    使用IDEA对springboot+activiti开发demo和详细讲解;下载该资源可以先了解下具体文章https://blog.csdn.net/qq_28582847/article/details/79911450 还有...

    基于springboot+mybatis+shiro+redis+vue构建的前后端分离的企业通用办公管理系统,特别适合个人学习

    基于 springboot+mybatis_+shiro + redis+activiti+quarts+quartz+vue 写的一个前后分离办公企业管理系统 ,通用服务端,用于学习。 使用技术 服务端: springboot(2.2.1) + mybatis-push + shiro(1.4.0) + redis +...

    springBoot+activiti

    1. **创建测试类**:在项目中创建测试类,使用 `@Autowired` 注解注入 Activiti 相关服务,如 RepositoryService、RuntimeService 等。 2. **启动流程实例**:编写测试方法,启动流程实例,可以通过 `...

    springboot+activiti部署插件集成

    本项目"springboot+activiti部署插件集成"的目标是将这两个强大的工具结合在一起,使得开发者能够在Spring Boot应用中无缝地嵌入Activiti的工作流功能。下面将详细介绍这个集成过程中的关键知识点: 1. **Spring ...

    springboot集成activiti项目Demo源码分享

    《SpringBoot集成Activiti项目Demo源码解析》 在当今的软件开发中,工作流引擎已经成为企业级应用不可或缺的一部分,而Activiti作为一款强大的、开源的工作流引擎,被广泛应用于业务流程管理(BPM)系统。...

    springboot整合activiti5.22实现页面流程设计项目

    springboot整合activiti5.22实现页面流程设计项目,可直接启动,自动建表,调用接口http://localhost:8080/models/newModel,创建流程模型后,可直接访问http://localhost:8080/static/modeler.html?modelId=75001...

    springboot整合activiti完整demo

    **SpringBoot整合Activiti完整DEMO详解** SpringBoot作为一个轻量级的Java开发框架,以其简洁的配置和快速的应用启动而受到广泛欢迎。而Activiti则是一个强大的工作流引擎,常用于实现业务流程自动化。本DEMO展示了...

    SpringBoot+Activiti+Bootstrap实现的办公自动化系统.zip

    《SpringBoot+Activiti+Bootstrap实现的办公自动化系统详解》 在现代企业信息化管理中,办公自动化系统(Office Automation System,简称OAS)扮演着至关重要的角色,它能够有效地提高工作效率,规范工作流程,实现...

    Springboot +activiti所写的OA系统.zip

    《SpringBoot + Activiti 实现OA系统详解》 在当今的软件开发领域,SpringBoot以其简洁的配置和快速的启动特性,已经成为企业级应用开发的首选框架。而Activiti作为一款开源的工作流引擎,能够帮助开发者轻松实现...

    基于springboot+mybatis+shiro+activity的企业办公Oa系统(源码+数据库),个人学习,本科毕业设计

    基于 springboot+myvatis_+ mvc + activiti+quarts+quartz 写的一个办公企业管理系统 OA 软件架构 springboot+myvatis_+ mvc + activiti+quarts+quartz 说明 功能: 用户模块 日志模块 考勤模块 工作流模块 请假 ...

    SpringBoot+Activiti7

    **SpringBoot+Activiti7 实现简单增删改查** 在现代企业级应用开发中,工作流管理系统(Workflow Management System)扮演着至关重要的角色。它能够帮助自动化业务流程,提高效率,减少人为错误。SpringBoot作为...

Global site tag (gtag.js) - Google Analytics