SpringBoot整合Activiti7的实现代码

下面是详细讲解SpringBoot整合Activiti7的实现代码的完整攻略。

什么是Activiti7

Activiti7是一个轻量级的工作流引擎,它提供了一套流程定义、流程实例、任务管理等服务,可以用来设计和实现复杂的业务流程。

如何在SpringBoot中整合Activiti7

步骤一:添加依赖

在SpringBoot项目的pom.xml文件中添加Activiti7的依赖:

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

步骤二:配置数据库连接

在SpringBoot项目的配置文件(application.yml或application.properties)中添加数据库连接配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: root

步骤三:配置Activiti7引擎

在SpringBoot项目的配置类中配置Activiti7引擎:

@Configuration
public class ActivitiConfig {

    @Bean
    public ProcessEngineConfiguration processEngineConfiguration(DataSource dataSource) {
        SpringProcessEngineConfiguration configuration = new SpringProcessEngineConfiguration();
        configuration.setDataSource(dataSource);
        configuration.setTransactionManager(new DataSourceTransactionManager(dataSource));
        configuration.setDatabaseSchemaUpdate("true");
        return configuration;
    }

    @Bean
    public ProcessEngine processEngine(ProcessEngineConfiguration processEngineConfiguration) {
        return processEngineConfiguration.buildProcessEngine();
    }

    @Bean
    public RepositoryService repositoryService(ProcessEngine processEngine) {
        return processEngine.getRepositoryService();
    }

    @Bean
    public RuntimeService runtimeService(ProcessEngine processEngine) {
        return processEngine.getRuntimeService();
    }

    @Bean
    public TaskService taskService(ProcessEngine processEngine) {
        return processEngine.getTaskService();
    }

    @Bean
    public HistoryService historyService(ProcessEngine processEngine) {
        return processEngine.getHistoryService();
    }

    @Bean
    public ManagementService managementService(ProcessEngine processEngine) {
        return processEngine.getManagementService();
    }

}

步骤四:定义流程

在classpath:/processes目录下创建一个简单的工作流程定义文件(helloworld.bpmn20.xml),内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" 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" targetNamespace="http://www.activiti.org/test">
  <process id="helloworld" name="Hello World Process" isExecutable="true">
    <startEvent id="start" activiti:initiator="initiator"></startEvent>
    <userTask id="task1" name="User Task" activiti:candidateUsers="kermit"></userTask>
    <endEvent id="end"></endEvent>
    <sequenceFlow id="flow1" sourceRef="start" targetRef="task1"></sequenceFlow>
    <sequenceFlow id="flow2" sourceRef="task1" targetRef="end"></sequenceFlow>
  </process>
</definitions>

步骤五:发布流程和启动流程实例

在SpringBoot的控制器中编写发布流程和启动流程实例的代码:

@RestController
@RequestMapping("/activiti")
public class ActivitiController {

    @Autowired
    private RepositoryService repositoryService;

    @Autowired
    private RuntimeService runtimeService;

    @PostMapping("/publish")
    public String publish(@RequestBody String xml) {
        Deployment deployment = repositoryService.createDeployment()
                .addString("helloworld.bpmn20.xml", xml).deploy();
        return "Deployment ID: " + deployment.getId();
    }

    @PostMapping("/start")
    public String start(@RequestParam String processDefinitionKey, @RequestParam String initiator) {
        ProcessInstance instance = runtimeService.startProcessInstanceByKey(processDefinitionKey, initiator);
        return "Process ID: " + instance.getId();
    }

}

访问http://localhost:8080/activiti/publish接口发布流程文件,访问http://localhost:8080/activiti/start接口启动流程实例。

Activiti7整合SpringBoot示例

以下是两个Activiti7整合SpringBoot的具体示例:

示例一:将流程图转成图片并返回给前端

@RestController
@RequestMapping("/activiti")
public class ActivitiController {

    @Autowired
    private RepositoryService repositoryService;

    @Autowired
    private ProcessEngine processEngine;

    @PostMapping("/publish")
    public String publish(@RequestBody String xml) {
        Deployment deployment = repositoryService.createDeployment()
                .addString("helloworld.bpmn20.xml", xml).deploy();
        return "Deployment ID: " + deployment.getId();
    }

    @GetMapping("/image")
    public void getImage(@RequestParam String processDefinitionId, HttpServletResponse response)
            throws IOException {
        BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
        ProcessDiagramGenerator diagramGenerator = processEngine.getProcessEngineConfiguration()
                .getProcessDiagramGenerator();
        InputStream inputStream = diagramGenerator.generateDiagram(bpmnModel,
                "png", Collections.emptyList(), Collections.emptyList(), "宋体", "微软雅黑",
                "黑体", null, 1.0);
        response.setContentType("image/png");
        IOUtils.copy(inputStream, response.getOutputStream());
    }

}

示例二:查询用户任务

@RestController
@RequestMapping("/activiti")
public class ActivitiController {

    @Autowired
    private TaskService taskService;

    @PostMapping("/publish")
    public String publish(@RequestBody String xml) {
        Deployment deployment = repositoryService.createDeployment()
                .addString("helloworld.bpmn20.xml", xml).deploy();
        return "Deployment ID: " + deployment.getId();
    }

    @PostMapping("/start")
    public String start(@RequestParam String processDefinitionKey, @RequestParam String initiator) {
        ProcessInstance instance = runtimeService.startProcessInstanceByKey(processDefinitionKey, initiator);
        return "Process ID: " + instance.getId();
    }

    @GetMapping("/tasks")
    public List<Task> getTasks(@RequestParam String candidateUser) {
        return taskService.createTaskQuery().taskCandidateUser(candidateUser).list();
    }

}

访问http://localhost:8080/activiti/tasks接口查询候选用户的任务。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合Activiti7的实现代码 - Python技术站

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

相关文章

  • ThinkPHP查询返回简单字段数组的方法

    下面我将详细讲解“ThinkPHP查询返回简单字段数组的方法”: 什么是“ThinkPHP查询返回简单字段数组的方法”? 在ThinkPHP中,我们可以直接使用query方法查询数据库并返回结果,返回的结果可以是一个数据集,或者是包含查询结果的关联数组。但是如果我们只需要一个简单的一维数组,并且只需要其中的某几个字段,这时使用query方法就会显得有些繁琐,…

    database 2023年5月22日
    00
  • MySQL InnoDB存储引擎详解

    MySQL的InnoDB存储引擎是MySQL支持的一种事务型存储引擎,其提供了ACID(原子性、一致性、隔离性、持久性)事务支持和行级锁定。 ACID事务支持 ACID事务中的“原子性”是指在一个事务中的所有操作要么全部成功要么全部失败,不能只有部分成功部分失败。这样可以确保数据的一致性。 InnoDB通过写日志来确保原子性。当一个事务开始时,InnoDB会…

    MySQL 2023年3月9日
    00
  • redis sentinel监控高可用集群实现的配置步骤

    Redis Sentinel是Redis分布式系统的监控工具,它能够监控Redis集群中每个节点的运行状态,并在节点故障时进行自动故障转移,从而保证Redis集群的高可用性。下面是采用Redis Sentinel实现高可用集群监控的完整配置步骤: 安装Redis Sentinel 首先需要安装Redis Sentinel。可以通过以下命令进行安装: sudo…

    database 2023年5月22日
    00
  • mongodb索引知识_动力节点Java学院整理

    MongoDB索引知识 什么是索引 索引是一种特殊的数据结构,用于提高数据库中特定数据的检索速度。它们是通过对一列或多列存储在数据库表中的数据进行排序来实现的。这样做可以让我们快速找到所需的数据而不必全盘扫描整个数据库。 索引对MongoDB查询的影响 MongoDB可以在查询时使用索引来提高查询效率,而不使用索引则要对整个集合进行扫描,查询耗时就会相对较长…

    database 2023年5月22日
    00
  • 关于linux redis安装及安装遇到的问题

    下面我将详细讲解关于Linux下Redis安装及安装遇到的问题的完整攻略。 安装 Redis 步骤1:下载Redis 进入Redis的官方网站 https://redis.io/download ,选择最新版本下载。 wget http://download.redis.io/releases/redis-5.0.5.tar.gz 步骤2:解压Redis 解…

    database 2023年5月22日
    00
  • 手把手教你用Redis 实现点赞功能并且与数据库同步

    手把手教你用Redis 实现点赞功能并且与数据库同步 一、背景介绍 在网站或应用中,点赞功能是常见的交互方式,它的实现需要进行大量的计数和数据存储。如果全部使用数据库进行点赞数量统计和查询功能相关操作,会对数据库造成不小的压力,从而影响整个应用的性能。 为了解决这个问题,我们可以使用Redis来实现点赞功能。Redis是一种内存数据存储系统,因此在执行计数操…

    database 2023年5月22日
    00
  • 怎么搭建单机Redis缓存服务

    这篇文章主要介绍“怎么搭建单机Redis缓存服务”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么搭建单机Redis缓存服务”文章能帮助大家解决问题。 1.安装 gcc [root@localhost ~]# yum install gcc 已加载插件:fastestmirror, langpacks base   …

    Redis 2023年4月13日
    00
  • SQL 提取姓名的首字母

    提取姓名的首字母,可以使用 SQL 函数 LEFT 和 SUBSTR 来实现。 在姓名列中,首先需要使用 LEFT 函数获取姓名的第一个字符,然后使用 UPPER 函数将该字符转换为大写,最终得到姓名的首字母。 以下是两个示例: 示例一 假设有一个名为 users 的数据表,其中有一个名为 name 的列,存储着用户的姓名。 首先使用以下查询语句从 user…

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