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中基本数据类型与Object的关系说明

    Java中基本数据类型与Object的关系说明 在Java中,基本数据类型和Object类型之间存在着一些关系,本文将介绍它们之间的区别和联系。 基本数据类型和对象类型 Java中有8种基本数据类型,它们分别是byte、short、int、long、float、double、char和boolean。而除了基本数据类型之外,其他的都是对象类型。 基本数据类型…

    Java 2023年5月26日
    00
  • Tomca启动闪退问题解决(八大类)

    针对 “Tomcat启动闪退问题” 的解决攻略,我可以提供以下的具体步骤来解决这个问题,该过程中可能包含多个方面的解决方法: 1. 确认Java环境是否正常 首先需要检查Java环境是否正常,在命令行中输入Java -version来查看Java版本是否正确显示。如果没有显示,则需要重新安装并配置Java环境。 2. 检查Tomcat配置 其次需要检查Tom…

    Java 2023年5月19日
    00
  • 深入解析Java的Spring框架中的混合事务与bean的区分

    深入解析Java的Spring框架中的混合事务与bean的区分,这是一个比较广泛的话题,我们可以从以下几个方面进行讲解: Spring框架事务管理的概述 Spring混合事务的定义与原理 Spring Bean的定义与作用 如何区分Spring混合事务与Bean 1. Spring框架事务管理的概述 Spring框架中的事务管理是一种重要的机制,可以帮助我们…

    Java 2023年5月20日
    00
  • 详解spring封装hbase的代码实现

    针对“详解spring封装hbase的代码实现”的完整攻略,我将从以下几个方面进行详细讲解: HBase介绍 Spring与HBase集成 Spring对HBase进行封装的代码实现过程 示例1:使用Spring封装HBase进行数据存储 示例2:使用Spring封装HBase进行数据查询 1. HBase介绍 HBase是一种高可扩展的分布式NoSQL数据…

    Java 2023年5月20日
    00
  • java 操作windows 共享目录方法介绍

    Java操作Windows共享目录方法介绍 Java是一种跨平台的编程语言,但在处理Windows操作系统上的共享文件和目录时,需要遵循特定的步骤。本文介绍Java操作Windows共享目录的方法,旨在帮助开发人员在处理共享目录时更加安全和高效地进行开发。 1. Windows共享路径的格式 在Java中,我们需要了解Windows共享路径的格式,以便正确访…

    Java 2023年5月24日
    00
  • Java开发基础日期类代码详解

    Java开发基础日期类代码详解 在Java开发中,经常需要处理日期和时间相关的数据。为了方便处理日期和时间,Java提供了一些日期类。这些日期类可以帮助我们实现日期格式化、日期比较、日期计算等操作。本文将详细讲解Java日期类的使用方法,包括如何创建日期对象、如何进行日期格式化和解析、如何比较日期、如何计算日期等。 如何创建日期对象 Java中有多种日期类,…

    Java 2023年5月20日
    00
  • Java源码解析阻塞队列ArrayBlockingQueue功能简介

    Java源码解析阻塞队列ArrayBlockingQueue功能简介 简介 ArrayBlockingQueue是java.util.concurrent包下一个基于数组的有界阻塞队列,它内部维护了一个定长数组用于存储队列元素,同时还提供了对队列元素的访问以及操作的方法,它是线程安全的,通过使用代码所提供的锁进行同步控制从而保证安全。 它所提供的基本特性如下…

    Java 2023年5月26日
    00
  • jsp页面验证码完整实例

    下面是关于”JSP页面验证码完整实例”的完整攻略: 1. 流程介绍 验证码是一种常见的安全验证,可以有效地防止机器人程序以及恶意攻击。在 JSP 页面中,使用验证码可以有效地保障数据的安全性。 本文将介绍如何在 JSP 页面中实现验证码的功能,包括生成随机验证码、将验证码展示在页面中、验证用户输入的验证码是否正确等。具体流程如下: 用户在页面中填写用户名、密…

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