Springboot集成activity过程图解

以下是关于“Springboot集成activity过程图解”的完整攻略。

步骤一:添加依赖

首先,在Spring Boot项目中添加依赖,以便可以使用activity。 在项目的pom.xml文件中添加以下依赖项:

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

步骤二:配置数据库

activity需要一个数据库来存储流程定义、实例和任务等信息。因此,我们需要在src/main/resource目录下创建一个application.properties文件,并配置activity与数据库之间的连接。

具体配置如下:

spring.datasource.url=jdbc:mysql://localhost:3306/springboot_activity?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

步骤三:创建流程

接下来,我们将使用BPMN 2.0标准来定义一个简单的流程。在这个流程中,我们将使用“审批请假”这个场景作为示例。

使用Eclipse或IntelliJ IDEA,创建一个名为leaveProcess.bpmn20.xml的BPMN 2.0文件。

<?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"
             xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
             id="Definitions_1"
             targetNamespace="http://activiti.org/bpmn20"
             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">

    <!-- 流程元素 -->
    <process id="leaveProcess" name="请假审批">
        <!-- 开始节点 -->
        <startEvent id="startEvent" name="开始">
            <outgoing>flow3</outgoing>
        </startEvent>
        <!-- 请假节点 -->
        <userTask id="userTask" name="请假流程" activiti:assignee="${userId}">
            <incoming>flow3</incoming>
            <outgoing>flow4</outgoing>
        </userTask>
        <!-- 请假节点 -->
        <userTask id="managerTask" name="经理审批" activiti:assignee="${manager}">
            <incoming>flow4</incoming>
            <outgoing>flow5</outgoing>
        </userTask>
        <!-- 请假节点 -->
        <userTask id="hrTask" name="HR审批" activiti:assignee="${hr}">
            <incoming>flow5</incoming>
            <outgoing>flow6</outgoing>
        </userTask>
        <!-- 结束节点 -->
        <endEvent id="endEvent" name="结束">
            <incoming>flow6</incoming>
        </endEvent>
        <!-- 流程连线 -->
        <sequenceFlow id="flow3" name="start userTask" sourceRef="startEvent" targetRef="userTask"/>
        <sequenceFlow id="flow4" name="userTask managerTask" sourceRef="userTask" targetRef="managerTask"/>
        <sequenceFlow id="flow5" name="managerTask hrTask" sourceRef="managerTask" targetRef="hrTask"/>
        <sequenceFlow id="flow6" name="hrTask endEvent" sourceRef="hrTask" targetRef="endEvent"/>
    </process>

    <!-- 流程图元素 -->
    <bpmndi:BPMNDiagram id="BPMNDiagram_1">
        <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="leaveProcess">
            <bpmndi:BPMNEdge id="edge9" bpmnElement="flow3">
                <omgdi:waypoint x="215" y="140"/>
                <omgdi:waypoint x="257" y="140"/>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge id="edge10" bpmnElement="flow4">
                <omgdi:waypoint x="310" y="140"/>
                <omgdi:waypoint x="350" y="140"/>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge id="edge11" bpmnElement="flow5">
                <omgdi:waypoint x="400" y="140"/>
                <omgdi:waypoint x="440" y="140"/>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge id="edge12" bpmnElement="flow6">
                <omgdi:waypoint x="490" y="140"/>
                <omgdi:waypoint x="530" y="140"/>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNShape id="shape2" bpmnElement="startEvent">
                <omgdc:Bounds x="179" y="122" width="30" height="30"/>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape id="shape3" bpmnElement="userTask">
                <omgdc:Bounds x="257" y="100" width="100" height="80"/>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape id="shape4" bpmnElement="managerTask">
                <omgdc:Bounds x="350" y="100" width="100" height="80"/>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape id="shape5" bpmnElement="hrTask">
                <omgdc:Bounds x="440" y="100" width="100" height="80"/>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape id="shape6" bpmnElement="endEvent">
                <omgdc:Bounds x="530" y="122" width="30" height="30"/>
            </bpmndi:BPMNShape>
        </bpmndi:BPMNPlane>
    </bpmndi:BPMNDiagram>
</definitions>

在这个BPMN 2.0文件中,我们定义了一个名为“开始”的开始事件,一个名为“结束”的结束事件和三个用户任务。在用户任务中,我们使用了activiti:assignee属性指定任务负责人的用户名。

步骤四:启动流程

在Spring Boot项目的src/main/java目录下,创建一个名为ActivityDemoApplication的Spring Boot应用程序。

@SpringBootApplication
public class ActivityDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(ActivityDemoApplication.class, args);
    }
}

接下来,在src/main/java目录下创建一个名为ProcessEngineConfig的Java类,以引导activity的流程引擎;并在类中创建一个ProcessEngineConfiguration对象,并配置它们所需的Engine组件。

@Configuration
@Order(1)
public class ProcessEngineConfig implements ProcessEngineConfigurationConfigurer {

    @Qualifier("dataSource")
    @Autowired
    private DataSource dataSource;

    @Bean
    public ProcessEngineConfigurationImpl processEngineConfiguration(ProcessEngineConfigurationConfigurer processEngineConfigurationConfigurer) {
        SpringProcessEngineConfiguration configuration = new SpringProcessEngineConfiguration();
        configuration.setDataSource(dataSource)
                .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
                .setAsyncExecutorEnabled(true)
                .setAsyncExecutorActivate(true)
                .setHistory(ProcessEngineConfiguration.HISTORY_FULL)
                .setTransactionManager(new SpringTransactionManager())
                .setJobExecutorActivate(true)
                .setActivityFontName("宋体")
                .setLabelFontName("宋体")
                .setTitleFontName("宋体");


        processEngineConfigurationConfigurer.configure(configuration);

        return configuration;
    }

    @Bean
    public ProcessEngineFactoryBean processEngineFactoryBean() {

        ProcessEngineFactoryBean factoryBean = new ProcessEngineFactoryBean();
        factoryBean.setProcessEngineConfiguration(processEngineConfiguration(null));
        return factoryBean;
    }

    @Bean
    public ProcessEngine processEngine(ProcessEngineFactoryBean factoryBean) throws Exception {
        return factoryBean.getObject();
    }
}

在上述代码中,我们定义了一个ProcessEngineConfig类,并实现了一个ProcessEngineConfigurationConfigurer接口,以自定义activity的流程引擎。 这里指定了dataSource作为存储活动数据的数据库,并设置一些流程引擎的配置参数。例如,我们使流程引擎具有异步执行能力,并使流程引擎在启动时激活。 我们还定义了字体名称,使活动的用户任务能够以正确的字体渲染。

在/src/main/java目录下创建一个名为LeaveController的Java类,并使用@RestController注解将它标记为REST API。这个接口将会处理“请假”流程请求。

@RestController
@RequestMapping(value = "/leave")
public class LeaveController {

    @Autowired
    private RuntimeService runtimeService;

    @PostMapping(value = "/start-process")
    public String startProcess(@RequestParam("userId") String userId,
                               @RequestParam("manager") String manager,
                               @RequestParam("hr") String hr) {

        Map<String, Object> variables = new HashMap<>();
        variables.put("userId", userId);
        variables.put("manager", manager);
        variables.put("hr", hr);

        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess", variables);
        return processInstance.getId();
    }
}

在上述代码中,我们使用RuntimeService对象启动活动的“请假”流程,并在流程实例启动时将“userId”、“manager”和“hr”三个变量传递给它们。

步骤五:在浏览器中测试

现在,我们已成功的将Springboot集成activity,启动并测试了一个简单的“请假审批”流程。 在Web浏览器上运行http://localhost:8080/leave/start-process,启动流程实例并使用请求参数传递名为“userId”、“manager”和“hr”的三个变量,最终在页面中看到一个ProcessInstance ID。

我们也可以使用activity-explorer localhost:8080/flowable-ui/访问“流程引擎管理器”,并查看具体的流程实例,任务和流程定义等信息。

以上就是集成Springboot和activity的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot集成activity过程图解 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • 如何实现线程安全的单例模式?

    以下是关于如何实现线程安全的单例模式的完整使用攻略: 什么是线程安全的单例模式? 线程安全单例模式是指在多线程环境下,保证有一个实例对象被创建,并且多个线程可以同时访问该实例对象,而不会出现数据不一致或程序崩溃等问题。在多线程编程中,线程安全的单例模式是非常重要的,因为多个线程同时访问单例对象,会出现线程间争用的问题,导致数据不一致或程序崩溃。 如何实现线程…

    Java 2023年5月12日
    00
  • spring boot整合kafka过程解析

    下面是关于Spring Boot整合Kafka过程的解析攻略,并附带两个示例: 概述 Kafka是一个开源的分布式消息传递平台,它提供了高吞吐量和低延迟的方式来传递消息。它的主要特点是: 高吞吐量:Kafka每秒钟可以处理数百万的消息。这使得它适合于对实时数据流进行发布/订阅、消息队列、异步处理等场景。 高扩展性:Kafka的扩展性非常好,多个Kafka服务…

    Java 2023年5月19日
    00
  • JAVA+Struts2获取服务器地址的方法

    要获取服务器地址,有几种情况可以考虑: 获取请求的完整URL Struts2可以通过HttpServletRequest的getRequestURL方法获取当前请求URL,包括协议,主机名,端口和路径。在Action类中可以这样获取: import javax.servlet.http.HttpServletRequest; import com.opens…

    Java 2023年5月20日
    00
  • 详解Java二叉排序树

    详解Java二叉排序树 什么是二叉排序树 二叉排序树是一种特殊的二叉树,它满足如下条件: 左子树上所有节点的值均小于它的根节点的值。 右子树上所有节点的值均大于它的根节点的值。 左、右子树也分别为二叉排序树。 二叉排序树可以使用它的特殊性质进行快速查找、插入、删除等操作。 实现二叉排序树 实现二叉排序树需要定义二叉树节点类以及二叉排序树类: class No…

    Java 2023年5月19日
    00
  • Java 关于时间复杂度和空间复杂度的深度刨析

    Java 关于时间复杂度和空间复杂度的深度刨析 时间复杂度和空间复杂度是算法中非常重要的概念,它们可以帮助我们衡量算法的效率。本文将对它们进行深度探讨,并用实例进行说明。 时间复杂度 时间复杂度是指算法执行所需要的时间,通常使用O(n)表示,其中n是输入数据的规模。常见的时间复杂度有: 常数时间复杂度:O(1),无论输入数据量的大小,算法的执行时间都保持不变…

    Java 2023年5月26日
    00
  • Java抽象类原理与用法实例详解

    Java抽象类原理与用法实例详解 什么是抽象类 Java中的抽象类是一种特殊的类,它不能被实例化,只能被继承。抽象类可以包含抽象方法和非抽象方法,但是必须要有至少一个抽象方法。抽象方法没有方法体,需要在子类中实现具体功能。 抽象类的作用 抽象类的主要作用是为子类提供一个通用的模板,让子类在继承的基础上实现具体功能。抽象类可以提供一些共同的方法和属性,同时又能…

    Java 2023年5月26日
    00
  • Intellij IDEA导入JAVA项目并启动(图文教程)

    下面详细讲解一下“Intellij IDEA导入JAVA项目并启动(图文教程)”的完整攻略。 1. 下载Intellij IDEA 首先,我们需要下载安装Intellij IDEA,可以到官网(https://www.jetbrains.com/idea/)下载安装包并进行安装。 2. 导入JAVA项目 在Intellij IDEA中选择File ->…

    Java 2023年5月26日
    00
  • Spring BOOT AOP基础应用教程

    Spring BOOT AOP基础应用教程 Spring AOP(面向切面编程)是Spring框架的一个重要组成部分,它可以帮助我们更好地管理和维护代码。在本文中,我们将介绍Spring Boot AOP的基础知识和应用方法。 步骤一:添加依赖 我们需要在pom.xml文件中添加Spring AOP的依赖。以下是一个示例: <dependency&gt…

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部