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日

相关文章

  • Mybatis-Plus之ID自动增长的设置实现

    下面是关于”Mybatis-Plus之ID自动增长的设置实现”的完整攻略: I. 前言 在使用Mybatis-Plus框架进行Java项目开发过程中,ID自增长是一个常见的需求。Mybatis-Plus提供了多种自增长的方式,本篇攻略就是要详细讲解其中的一种方式:MySQL的自增长。 II. MySQL的自增长配置 1. 创建表 创建表时,需要设置ID列为自…

    database 2023年5月21日
    00
  • Mysql读写分离过期常用解决方案

    当一个网站的流量逐渐增加时,单个MySQL服务器可能不足以支撑数据库负载。在这种情况下,那么就需要将数据库的读和写分别分配到不同的服务器上。这就是所谓的MySQL读写分离。但是,一个常见的问题是,MySQL读写分离后数据同步问题,这可能会导致数据不一致。以下是两种常用的解决方案: 使用MySQL主从复制方式 这种解决方案是在主库上分配写操作,然后将数据复制到…

    database 2023年5月22日
    00
  • java实现Linux(centos) 中docker容器下命令交互的代码(配置向导)

    当我们在 Linux(CentOS)中运行 Docker 容器时,我们可能需要与容器中运行的应用程序进行交互(执行命令或访问文件等)。那么该如何实现 Docker 容器下命令交互的代码呢?下面是这个过程的完整攻略和配置向导。 步骤一:获取 Docker 容器的 ID 或名称 要与 Docker 容器进行交互,我们首先需要获取 Docker 容器的 ID 或名…

    database 2023年5月22日
    00
  • Mysql5.7定时备份的实现

    下面来详细讲解如何实现MySQL5.7的定时备份。本攻略将分为以下几个步骤: 准备工作 编写备份脚本 配置Linux系统定时任务 接下来就来一步一步进行实现。 1. 准备工作 在开始备份之前,需要先确定备份的目录和备份文件名,并确保该目录对MySQL用户可写。 我们可以选择创建一个名为backups的目录来保存备份文件。可以通过以下命令创建该目录: mkdi…

    database 2023年5月22日
    00
  • redis查询key的数量

    方法1:dbsize显示当前库key的数量 192.168.0.1:6379> dbsize (integer) 69421 方法2:info keyspace可以看到所有库key的数量 192.168.0.1> info keyspace # Keyspace db0:keys=69421,expires=10845,avg_ttl=57007…

    Redis 2023年4月12日
    00
  • SQL 定位连续的值区间

    SQL定位连续的值区间的攻略通常使用窗口函数和自连接完成,具体步骤如下: 窗口函数生成行编号,按照要查询的列进行排序 在查询语句中使用ROW_NUMBER() OVER (ORDER BY column_name)来生成行编号,按照要查询的列进行排序,这个行编号将作为后面自连接表中的关联条件之一。 将原表自连接 将原表自连接,连接条件为行编号相差一,同时还需…

    database 2023年3月28日
    00
  • 主键和超级键的区别

    主键和超级键都是关系数据库领域中的术语,是用于描述数据库中数据表的两个概念。 主键 什么是主键 主键是一个不可重复的、唯一性的、非空的字段,用来唯一标识一条记录。每个数据表都必须至少拥有一个主键。 主键的特点 唯一性:每个主键值只会在数据表中出现一次 非空:主键值不能为空 不可重复:每个主键值必须唯一 主键的示例 假设有一个数据表格students,其中有以…

    database 2023年3月27日
    00
  • 如何使用Python在MySQL中创建索引?

    要使用Python在MySQL中创建索引,可以使用Python的内置模块sqlite3或第三方库mysql-connector-python。以下是使用mysql-connector-python在MySQL中创建索引的完整攻略: 连接 要连接到MySQL,需要提供MySQL的主机、用户名、和密码。可以使用以下代码连接MySQL: import mysql.…

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