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日

相关文章

  • Springboot中MyBatisplus使用IPage和Page分页的实例代码

    下面是 SpringBoot 中 MyBatisPlus 使用 IPage 和 Page 分页的实例代码完整攻略。 1. 添加 MyBatisPlus 依赖 首先,需要在 pom.xml 文件中添加 MyBatisPlus 依赖: <!– MyBatis-Plus 依赖 –> <dependency> <groupId&gt…

    Java 2023年5月20日
    00
  • Java基础教程之整数运算

    Java基础教程之整数运算攻略 Java是一种强类型语言,其中包含了整数类型及其运算操作。本文将详细讲解Java基础教程中的整数运算,包括基本概念、运算规则和示例说明。 基本概念 Java中的整数类型主要有四种:byte、short、int和long,对应的存储空间分别为1、2、4和8个字节。整数运算包括加、减、乘、除和取模等操作。 运算规则 Java中的整…

    Java 2023年5月26日
    00
  • response.setHeader参数、用法的介绍

    当我们使用Node.js写网站时,有时候需要通过设置response头信息来对客户端请求做出响应。response header就是指这些头信息。 在Node.js中,我们可以使用response对象中的setHeader方法来设置response header。 下面是关于response.setHeader的详细介绍: response.setHeade…

    Java 2023年6月15日
    00
  • Java异常类型介绍及处理方法

    Java异常类型介绍及处理方法 什么是Java异常 Java异常是程序中出现问题的信号,可以用来指示程序中的错误。它们在程序中自动抛出,也可以使用 throw 关键字手动抛出。在程序中处理异常时,可以使用 try-catch 块来处理异常并且避免程序崩溃。Java中的异常分为两种类型:受检异常和非受检异常。 受检异常 受检异常(Checked Excepti…

    Java 2023年5月26日
    00
  • Java 用反射设置对象的属性值实例详解

    接下来我会用标准的markdown格式文本进行讲解,包含标题、代码块等内容。 Java 用反射设置对象的属性值实例详解 在Java中,我们经常需要对对象进行操作,其中一项操作是设置对象的属性值。使用反射机制可以在运行时动态地获取类的信息、创建对象、调用方法和操作属性。 在Java中,可以通过反射机制设置对象的属性值。下面是详细教学: 第一步:获取类对象 首先…

    Java 2023年5月26日
    00
  • Spring Boot 底层原理基础深度解析

    下面我将详细讲解“Spring Boot 底层原理基础深度解析”的完整攻略。本攻略将分为以下几个部分: 什么是Spring Boot Spring Boot的核心概念及技术栈 Spring Boot的启动流程详解 Spring Boot的自动化配置原理 示例一:使用Spring Boot构建一个简单的Web应用 示例二:使用Spring Boot集成MyBa…

    Java 2023年5月19日
    00
  • java实现上传和下载工具类

    当我们需要在Java程序中实现文件上传和下载的功能时,可以采用Java的IO类来实现。下面是实现上传和下载功能的步骤。 1. 上传文件 1.1 上传文件的前端HTML页面 在上传文件的前端页面中,我们需要使用到input标签和form标签。如下所示: <form action="/upload" method="POST&…

    Java 2023年5月19日
    00
  • Mybatis Interceptor线程安全引发的bug问题

    首先我们来了解一下什么是 Mybatis Interceptor。 Mybatis Interceptor 是 Mybatis 框架提供的一个扩展机制,允许我们在 Mybatis 核心逻辑运行前或运行后进行拦截,来实现对 SQL 语句、参数、结果集等进行定制化处理。 而“线程安全引发的 bug”问题是在使用 Mybatis Interceptor 进行并发处…

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