SpringBoot 集成 Activiti7

一、IDEA 中 Activiti BPMN visualizer 插件的安装

1、简介

Activiti 插件 actiBPM 在新版 idea 2020 中已不支持,这里找到一款替代的 Activiti BPMN visualizer

2、安装(设置-插件-搜索 Activiti BPMN visualizer)

在这里插入图片描述

3、解决中文乱码问题

在IDEA的安装目录,在 idea64.exe.vmoptions 文件中加上 -Dfile.encoding=UTF-8

在这里插入图片描述

help ——> Edit Custom VM options 加 -Dfile.encoding=UTF-8

在这里插入图片描述

在这里插入图片描述

配置完后重启 idea

二、相关配置

1、添加 pom 依赖

	<dependencies>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter</artifactId>
            <version>7.1.0.M6</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.31</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
        </dependency>
    </dependencies>

2、activiti.cfg.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans [
        <!ELEMENT beans (bean)*>
        <!ATTLIST beans
                xmlns CDATA #REQUIRED
                xmlns:xsi CDATA #REQUIRED
                xsi:schemaLocation CDATA #REQUIRED>
        <!ELEMENT bean (property)*>
        <!ATTLIST bean
                id CDATA #REQUIRED
                class CDATA #REQUIRED>
        <!ELEMENT property (#PCDATA)>
        <!ATTLIST property
                name CDATA #REQUIRED
                value CDATA #REQUIRED>
        ]>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                    http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- processEnqine Activiti 的流程引擎 -->
    <bean id="processEngineConfiguration"
          class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcDriver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="jdbcUrl"
                  value="jdbc:mysql://localhost:3306/activiti?useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai&amp;useSSL=false&amp;nullCatalogMeansCurrent=true"/>
        <property name="jdbcUsername" value="root"/>
        <property name="jdbcPassword" value="123456"/>
        <!-- activiti 数据库表处理策略 -->
        <property name="databaseSchemaUpdate" value="true"/>
    </bean>
</beans>

三、API 相关操作

1、Activiti 主要流程操作步骤

定义流程,按照BPMN的规范,使用流程定义工具,用流程符号把整个流程描述出来。
部署流程,把画好的流程定义文件,加载到数据库中,生成表的数据。
启动流程,使用 java 代码来操作数据库表中的内容。
操作流程当中的各个任务。

2、简单的请假流程

流程图

在这里插入图片描述

代码

/**
     * 初始化数据库表:第一种方式
     */
    @Test
    public void testInitOne() {
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        System.err.println("processEngine = " + processEngine);
    }


    /**
     * 初始化数据库表:第二种方式
     */
    @Test
    public void testInitTwo() {
        ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
        ProcessEngine processEngine = configuration.buildProcessEngine();
        System.err.println("processEngine = " + processEngine);
    }


    /**
     * 流程部署
     */
    @Test
    public void testDeploy() {
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取 repositoryService 对象
        RepositoryService repositoryService = processEngine.getRepositoryService();
        // 进行部署
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("process/test.bpmn20.xml")
                .addClasspathResource("process/test.bpmn20.png")
                .name("请假流程")
                .deploy();

        // 输出部署的一些信息
        System.out.println("流程部署ID:" + deployment.getId());
        System.out.println("流程部署名称:" + deployment.getName());
    }


    /**
     * 启动流程实例
     */
    @Test
    public void testStartProcess() {
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取 runtimeService 对象
        RuntimeService runtimeService = processEngine.getRuntimeService();
        // 根据流程定义的key启动流程实例,这个key是在定义bpmn的时候设置的
        ProcessInstance instance = runtimeService.startProcessInstanceByKey("test");
        // 获取流程实例的相关信息
        System.out.println("流程定义的id = " + instance.getProcessDefinitionId());
        System.out.println("流程实例的id = " + instance.getId());
    }


    /**
     * 查询待办任务
     */
    @Test
    public void testSelectTodoTaskList() {
        String assignee = "李四";
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取指定用户审核任务
        TaskService taskService = processEngine.getTaskService();
        // 使用面对对象方式查询数据库
        List<Task> tasks = taskService.createTaskQuery()
                .processDefinitionKey("test")
                .taskAssignee(assignee)
                // 返回多个结果
                .list();
                // 只返回一个结果
                // .singleResult();

        // 自定义 sql 查询
        // taskService.createNativeTaskQuery();

        // 获取流程实例的相关信息
        for (Task task : tasks) {
            System.out.println("流程定义的id = " + task.getProcessDefinitionId());
            System.out.println("流程实例的id = " + task.getProcessInstanceId());
            System.out.println("任务id = " + task.getId());
            System.out.println("任务名称 = " + task.getName());
        }
    }


    /**
     * 指定用户去完成任务待办:多人审批在这操作,改变审核人名称就行了
     */
    @Test
    public void testCompleteTask() {
        String assignee = "李四";
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取指定用户审核任务
        TaskService taskService = processEngine.getTaskService();
        List<Task> tasks = taskService.createTaskQuery()
                .processDefinitionKey("test")
                .taskAssignee(assignee)
                .list();
        if (tasks != null && !tasks.isEmpty()){
            // 当前流程图所限制,只能做审核同意的动作
            for (Task task : tasks) {
                taskService.complete(task.getId());
            }
        }
    }


    /**
     * 审批添加备注
     */
    @Test
    public void testAddComment() {
        String assignee = "张三";
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取指定用户审核任务
        TaskService taskService = processEngine.getTaskService();
        List<Task> tasks = taskService.createTaskQuery()
                .processDefinitionKey("test")
                .taskAssignee(assignee)
                .list();
        if (tasks != null && !tasks.isEmpty()) {
            // 当前流程图所限制,只能做审核同意的动作
            for (Task task : tasks) {
                // 添加备注
                taskService.addComment(task.getId(), task.getProcessInstanceId(), assignee + "表示同意");
                taskService.complete(task.getId());
            }
        }
    }


    /**
     * 查询审批历史
     */
    @Test
    public void testSelectHistoryTask() {
        String processInstanceId = "2501";
        String assignee = "张三";
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 查看历史信息
        HistoryService historyService = processEngine.getHistoryService();
        // 获取指定用户审核任务
        TaskService taskService = processEngine.getTaskService();
        // 获取历史审核信息
        List<HistoricActivityInstance> userTask = historyService.createHistoricActivityInstanceQuery()
                .activityType("userTask")
                // 指定实例的id
                .processInstanceId(processInstanceId)
                .taskAssignee(assignee)
                .finished()
                .list();

        for (HistoricActivityInstance instance : userTask) {
            System.out.println("任务名称 = " + instance.getActivityName());
            System.out.println("任务开始时间 = " + instance.getStartTime());
            System.out.println("任务结束时间 = " + instance.getEndTime());
            System.out.println("任务耗时 = " + instance.getDurationInMillis());
            // 获取审批批注信息
            List<Comment> taskComments = taskService.getTaskComments(instance.getTaskId());
            if (!taskComments.isEmpty()){
                System.out.println("审批批注 = " + taskComments.get(0).getFullMessage());
            }
        }
    }


    /**
     * 查询流程相关信息
     */
    @Test
    public void testDefinitionQuery() {
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取仓库服务
        RepositoryService repositoryService = processEngine.getRepositoryService();
        // 获取流程定义集合
        List<ProcessDefinition> processDefinitionList = repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey("test")
                // 最新的一个版本
                .latestVersion()
                .list();
        // 遍历集合
        for (ProcessDefinition definition : processDefinitionList) {
            System.out.println("流程定义id = " + definition.getId());
            System.out.println("流程定义名称 = " + definition.getName());
            System.out.println("流程定义key = " + definition.getKey());
            System.out.println("流程定义版本 = " + definition.getVersion());
            System.out.println("流程部署id = " + definition.getDeploymentId());
            System.out.println("===============");
        }
    }


    /**
     * 资源文件下载
     */
    @Test
    public void testDownloadResource() throws IOException {
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取仓库服务
        RepositoryService repositoryService = processEngine.getRepositoryService();
        // 获取流程定义集合
        List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey("test")
                // 按照版本降序
                .orderByProcessDefinitionVersion()
                // 降序
                .desc()
                .list();

        // 获取最新那个
        ProcessDefinition definition = list.get(0);
        // 获取部署id
        String deploymentId = definition.getDeploymentId();

        // 获取bpmn的输入流
        InputStream bpmnInputStream = repositoryService.getResourceAsStream(deploymentId, definition.getResourceName());
        // 获取png的输入流
//        InputStream pngInputStream = repositoryService.getResourceAsStream(deploymentId, definition.getDiagramResourceName());

        String resourcePath = "C:/Users/ASUS/Desktop/" + File.separator + definition.getResourceName();
        File file = new File(resourcePath);
        if (!file.exists()) {
            file.getParentFile().mkdirs();
        }

        String diagramResourcePath = "C:/Users/ASUS/Desktop/" + File.separator + definition.getDiagramResourceName();
        file = new File(diagramResourcePath);
        if (!file.exists()) {
            file.getParentFile().mkdirs();
        }

        //复制文件
        FileCopyUtils.copy(bpmnInputStream, Files.newOutputStream(Paths.get(resourcePath)));
//        FileCopyUtils.copy(pngInputStream, Files.newOutputStream(Paths.get(diagramResourcePath)));
    }


    /**
     * 删除已经部署的流程定义
     */
    @Test
    public void testDeleteDeploy() {
        // 删除已经部署的流程定义
        String deploymentId = "45001";
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取仓库服务
        RepositoryService repositoryService = processEngine.getRepositoryService();
        // 删除流程定义,如果改流程定义已有流程实例启动,则会报错
//        repositoryService.deleteDeployment(deploymentId);
        // 设置 true,级联删除流程定义,即使有启动的实例也可以删除
        repositoryService.deleteDeployment(deploymentId, true);
    }


    /**
     * 启动流程,需要进行 BusinessKey 绑定流程实例
     */
    @Test
    public void testStartBindBusinessKey() {
        String businessKey = "1";
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RuntimeService runtimeService = processEngine.getRuntimeService();
        // 根据流程定义的key启动流程实例,这个key是在定义bpmn的时候设置的
        // 在启动流程的时候将业务key加进去
        ProcessInstance instance = runtimeService.startProcessInstanceByKey("test", businessKey);
        // 获取流程实例的相关信息
        System.out.println("流程定义id = " + instance.getProcessDefinitionId());
        System.out.println("流程实例id = " + instance.getId());
        System.out.println("业务标识 = " + instance.getBusinessKey());
    }


    /**
     * 跑到下一个节点,需要进行审批了,此时需要获取 BusinessKey 进而获取请假单信息
     */
    @Test
    public void testGetBusinessKey() {
        // 1、获取李四的待办信息
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        List<Task> task = taskService.createTaskQuery()
                .taskAssignee("李四")
                .processDefinitionKey("test")
                .list();

        // 2、获取 businessKey
        // 获取流程实例id
        String processInstanceId = task.get(1).getProcessInstanceId();
        RuntimeService runtimeService = processEngine.getRuntimeService();
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
                .processInstanceId(processInstanceId)
                .singleResult();
        String businessKey = processInstance.getBusinessKey();

        System.out.println("业务标识 = " + businessKey);
    }


    /**
     * 流程定义挂起与激活
     */
    @Test
    public void testSuspendAllProcessInstance() {
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取仓库服务
        RepositoryService repositoryService = processEngine.getRepositoryService();
        // 获取流程定义对象
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey("test")
                .singleResult();
        boolean suspended = processDefinition.isSuspended();
        // 输出流程定义状态
        System.out.println("流程定义状态:" + (suspended ? "已挂起" : "已激活"));
        String processDefinitionId = processDefinition.getId();

        if (suspended) {
            repositoryService.activateProcessDefinitionById(processDefinitionId, true, null);
            System.out.println("流程id:" + processDefinitionId + "已激活");
        } else {
            repositoryService.suspendProcessDefinitionById(processDefinitionId, true, null);
            System.out.println("流程id:" + processDefinitionId + "已挂起");
        }
    }


    /**
     * 流程实例挂起与激活
     */
    @Test
    public void testProcessInstance() {
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        RuntimeService runtimeService = processEngine.getRuntimeService();
        // 获取流程定义对象
        List<ProcessInstance> processInstanceList = runtimeService.createProcessInstanceQuery()
                .processDefinitionKey("test")
                .list();

        // 遍历集合
        for (ProcessInstance processInstance  : processInstanceList) {
            boolean suspended = processInstance.isSuspended();
            // 输出流程定义状态
            System.out.println("流程实例状态:" + processInstance + "," + (suspended ? "已挂起" : "已激活"));
            String processDefinitionId = processInstance.getId();

            if (suspended) {
                runtimeService.activateProcessInstanceById(processDefinitionId);
                System.out.println("流程实例id:" + processDefinitionId + "已激活");
            } else {
                runtimeService.suspendProcessInstanceById(processDefinitionId);
                System.out.println("流程实例id:" + processDefinitionId + "已挂起");
            }
        }
    }

3、审批人是动态参数

流程图

在这里插入图片描述

代码

	/**
     * 流程部署
     */
    @Test
    public void testDeploy() {
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取 repositoryService 对象
        RepositoryService repositoryService = processEngine.getRepositoryService();
        // 进行部署
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("process/demo.bpmn20.xml")
                .name("审批人是动态参数")
                .deploy();

        // 输出部署的一些信息
        System.out.println("流程部署ID:" + deployment.getId());
        System.out.println("流程部署名称:" + deployment.getName());
    }


    /**
     * 启动流程实例
     */
    @Test
    public void testStartProcess() {
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取 runtimeService 对象
        RuntimeService runtimeService = processEngine.getRuntimeService();

        // key:uel变量名称,  value:uel变量值
        HashMap<String, Object> map = new HashMap<>();
        map.put("day", "1");

        // 根据流程定义的key启动流程实例,这个key是在定义bpmn的时候设置的
        ProcessInstance instance = runtimeService.startProcessInstanceByKey("demo", map);
        // 获取流程实例的相关信息
        System.out.println("流程定义的id = " + instance.getProcessDefinitionId());
        System.out.println("流程实例的id = " + instance.getId());
    }


    /**
     * 启动流程实例--demo,审批人是动态参数
     */
    @Test
    public void demoStartProcess() {
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取 runtimeService 对象
        RuntimeService runtimeService = processEngine.getRuntimeService();

        // key:uel变量名称,  value:uel变量值
        HashMap<String, Object> map = new HashMap<>();
        map.put("assignee0", "lisi");
        map.put("assignee1", "zahngsan");

        // 根据流程定义的key启动流程实例,这个key是在定义bpmn的时候设置的
        ProcessInstance instance = runtimeService.startProcessInstanceByKey("demo", map);
        // 获取流程实例的相关信息
        System.out.println("流程定义的id = " + instance.getProcessDefinitionId());
        System.out.println("流程实例的id = " + instance.getId());
    }

4、分之流程,加判断条件

流程图

在这里插入图片描述
代码

	/**
     * 指定用户去完成任务待办:多人审批在这操作,改变审核人名称就行了--分支流程
     */
    @Test
    public void fenzhiCompleteTask() {
        String assignee = "zhangsan";
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取指定用户审核任务
        TaskService taskService = processEngine.getTaskService();
        List<Task> tasks = taskService.createTaskQuery()
                .processDefinitionKey("fenzhi")
                .taskAssignee(assignee)
                .list();
        if (tasks != null && !tasks.isEmpty()){

            // key:uel变量名称,  value:uel变量值
            HashMap<String, Object> map = new HashMap<>();
            map.put("day", "1");

            // 当前流程图所限制,只能做审核同意的动作
            for (Task task : tasks) {
                taskService.complete(task.getId(), map);
            }
        }
    }

5、候选人相关操作

流程图

在这里插入图片描述

代码

  	/**
     * 查询候选人待办任务--候选人
     */
    @Test
    public void houxuanrenSelectTodoTaskList() {
        // 任务候选人
        String candidateUser = "lisi";
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取指定用户审核任务
        TaskService taskService = processEngine.getTaskService();
        List<Task> tasks = taskService.createTaskQuery()
                .taskCandidateUser(candidateUser)
                .processDefinitionKey("houxuanren")
                .list();
        if (tasks != null && !tasks.isEmpty()){
            for (Task task : tasks) {
                System.out.println("流程定义的id = " + task.getProcessDefinitionId());
                System.out.println("流程实例的id = " + task.getProcessInstanceId());
                System.out.println("任务id = " + task.getId());
                System.out.println("任务名称 = " + task.getName());
            }
        }
    }


    /**
     * 领取候选人任务--候选人
     */
    @Test
    public void houxuanrenClaimTask() {
        // 任务id
        String taskId = "62505";
        // 任务候选人
        String candidateUser = "张三";
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取任务服务
        TaskService taskService = processEngine.getTaskService();
        // 指定人领取任务
        taskService.claim(taskId, candidateUser);
        // 如果反悔,不想领取任务
//        taskService.claim(taskId, null);
    }


    /**
     * 执行任务
     */
    @Test
    public void testCompleteTask() {
        // 任务id
        String taskId = "62505";
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取任务服务
        TaskService taskService = processEngine.getTaskService();
        // 指定人领取任务
        taskService.complete(taskId);
    }

6、排他网关

流程图,多个分之,只执行符合条件的一个分之

在这里插入图片描述
代码

   	/**
     * 指定用户去完成任务待办:多人审批在这操作,改变审核人名称就行了--排他网关
     */
    @Test
    public void exclusiveGatewayCompleteTask() {
        String assignee = "zhangsan";
        // 创建 ProcessEngine 对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        // 获取指定用户审核任务
        TaskService taskService = processEngine.getTaskService();
        List<Task> tasks = taskService.createTaskQuery()
                .processDefinitionKey("exclusivegateway")
                .taskAssignee(assignee)
                .list();
        if (tasks != null && !tasks.isEmpty()){

            // key:uel变量名称,  value:uel变量值
            HashMap<String, Object> map = new HashMap<>();
            map.put("day", "3");

            // 当前流程图所限制,只能做审核同意的动作
            for (Task task : tasks) {
                taskService.complete(task.getId(), map);
            }
        }
    }

7、并行网关

流程图,多个分之,都要执行,才能执行下一步

在这里插入图片描述

8、包含网关

流程图,既有排他网关,也有并行网关

在这里插入图片描述

  • 26
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Spring Boot 是一个流行的 Java Web 框架,而 Activiti 是一个流程引擎,可用于管理和执行业务流程。Spring Boot 可以很容易地与 Activiti 集成,使得使用 Activiti 更加简单方便。 以下是 Spring Boot 集成 Activiti 的基本步骤: 1. 引入 Activiti 依赖:在项目的 pom.xml 文件中添加 Activiti 的依赖。 2. 配置数据源:在 application.properties 或 application.yml 文件中配置数据源。 3. 配置 Activiti:创建一个 Activiti 配置类,使用 @Configuration 注解,并配置 Activiti 的数据源、流程图字体、ID 生成器等。 4. 部署流程定义:在项目启动时,自动部署 Activiti 的流程定义。可以通过实现 CommandLineRunner 接口,在 run 方法中编写自动部署的代码。 5. 编写业务代码:编写业务代码时,可以使用 Activiti 的 API 来管理和执行业务流程。 以上是 Spring Boot 集成 Activiti 的基本步骤。通过集成,可以更加方便地管理和执行业务流程。 ### 回答2: Spring Boot 是一个轻量级的 Java 框架,它通过提供一系列的开箱即用的特性,极大的简化了基于 Spring 框架的应用开发。Activiti 是一个流程引擎框架,它可以帮助开发者轻松地创建和管理业务流程。 为了将 Activiti 集成到 Spring Boot 中,我们需要执行以下步骤: 1. 添加依赖:在 pom.xml 文件中,添加 Activiti 和 Spring Boot Starter Activiti 的依赖。 2. 配置数据库:我们需要在 Spring Boot 应用中配置一个数据库,用于存储 Activiti 的流程相关数据。这可以在 application.properties 或 application.yml 文件中进行配置。 3. 配置 ActivitiActiviti 需要一些配置,这可以在 application.properties 或 application.yml 文件中进行配置。例如,我们需要指定 Process Engine 的名称,并定义 Activiti 的数据库模式。 4. 创建流程定义:使用 Activiti Modeler 或者 Activiti Designer 创建一个工作流程定义,然后将其导出为 BPMN 2.0 文件。 5. 部署流程定义:在 Spring Boot 应用中使用 Activiti API 部署流程定义。这可以通过 Java 代码或者 REST API 实现。 6. 运行工作流:使用 Activiti API 在应用中运行流程实例。这可以通过 Java 代码或者 REST API 实现。 除了以上步骤,我们还可以在 Spring Boot 中使用 Activiti 定义一个自定义表单,并将其嵌入到流程中。此外,我们还可以使用 Activiti 监视器来监控流程实例的运行状态。 综上所述,将 Activiti 集成到 Spring Boot 中可以有效地提高开发人员的工作效率和代码重用性,并加速业务流程的开发和管理。 ### 回答3: Spring Boot作为现代的Java Web开发框架,在开发中得到了广泛应用,而Activiti7作为流程引擎的代表则是业务流程中不可或缺的角色。集成Activiti7和Spring Boot能够为我们提供一个更加方便和可靠的业务流程实现方式。 Spring Boot提供了许多Spring集成的方式,而Activiti7提供了官方的Spring Boot Starter,该Starter通过引入Activiti7及其依赖,为我们提供快速和简单的Activiti7集成于Spring Boot项目的方式。具体来说,我们可以通过以下步骤完成Spring Boot和Activiti7的集成: 1. 添加Activiti7 Spring Boot Starter依赖: ```xml <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>7.0.0.Beta2</version> </dependency> ``` 2. 添加Activiti7配置,例如引入流程图扩展名,设置任务历史级别等: ```yaml spring: ## ## Activiti 7 configuration ## activiti: process-definition-location-prefix: classpath:/processes/ process-definition-location-suffix: .bpmn20.xml id-generator: simple history-level: full ``` 3. 编写Activiti7的流程定义文件,例如以下的示例: ```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:activiti="http://activiti.org/bpmn" targetNamespace="http://www.activiti.org/processdef"> <process id="approve" name="approve" isExecutable="true"> <startEvent id="start" name="Start"/> <userTask id="usertask1" name="Manager Approval" activiti:candidateGroups="managers"/> <userTask id="usertask2" name="HR Approval" activiti:candidateGroups="hr"/> <endEvent id="end" name="End"/> <sequenceFlow id="flow1" sourceRef="start" targetRef="usertask1"/> <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"/> <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="end"/> </process> </definitions> ``` 4. 在Spring Boot应用程序中使用Activiti7,例如创建并启动一个流程实例: ```java @Autowired private RuntimeService runtimeService; public void startProcess(String processDefinitionKey, Map<String, Object> variables) { runtimeService.startProcessInstanceByKey(processDefinitionKey, variables); } ``` 以上步骤是Spring Boot集成Activiti7的基础,我们还可以通过扩展Activiti7服务接口,为我们的业务流程提供更加定制化和个性化的实现方式。总之,在Spring Boot项目中集成Activiti7,能够为我们提供更加高效、便捷和可靠的业务流程实现平台。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-.- !

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值