SpringBoot整合Activiti7的实现代码

yizhihongxing

下面是详细讲解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日

相关文章

  • mysql常用sql与命令之从入门到删库跑路

    MySQL常用SQL与命令之从入门到删库跑路 MySQL是一种广泛应用的关系型数据库管理系统,具有开源、免费、性能高、稳定、安全等优点,被广泛用于各种类型的应用程序中。本攻略将从入门到删库跑路,详细讲解MySQL的常用SQL语句和命令,帮助读者快速掌握MySQL数据库的使用。 1. 安装MySQL 首先需要安装MySQL数据库,可以从MySQL官方网站[ht…

    database 2023年5月22日
    00
  • mysql删除重复记录语句的方法

    下面是详细的mysql删除重复记录语句方法攻略: 1. 查找重复记录 在删除重复记录之前,首先需要确定哪些记录是重复的,可以使用以下语句查找在指定列中有重复值的记录: SELECT col1, col2, COUNT(*) FROM table_name GROUP BY col1, col2 HAVING COUNT(*) > 1; 其中,col1和…

    database 2023年5月22日
    00
  • python数据库操作指南之PyMysql使用详解

    Python数据库操作指南之PyMysql使用详解 什么是Python数据库操作指南之PyMysql使用? PyMysql是Python操作MySQL数据库的一个模块,它可以方便的进行数据库的连接、查询、增加、修改、删除等操作,是非常常用的Python数据库操作模块之一。 本文将详细介绍Python数据库操作指南之PyMysql使用。 PyMysql的安装 …

    database 2023年5月18日
    00
  • sql注入之必备的基础知识

    针对“SQL注入之必备的基础知识”这个话题,我将从以下几个方面详细讲解: 什么是SQL注入 漏洞产生的原因 SQL注入的危害 如何防范SQL注入 示例说明 总结 接下来,我将逐一进行讲解。 1. 什么是SQL注入 SQL注入是一种常见的安全漏洞,其基本原理是通过修改web应用程序中对数据库的输入参数,来改变程序原有的SQL查询语句的意义,从而对数据库进行非法…

    database 2023年5月21日
    00
  • ServiceStack.Redis 使用链接池方法

    1、RedisManage.cs public static class RedisManager { private static PooledRedisClientManager _prcm; static RedisManager() { CreateManager(); } /// <summary> /// 创建链接池管理对象 /// …

    Redis 2023年4月16日
    00
  • 解决Oracle数据库归档日志占满磁盘空间问题

    要解决Oracle数据库归档日志占满磁盘空间的问题,我们可以按照以下步骤: 1. 检查归档日志的使用情况 首先要确认问题的所在。我们可以通过以下SQL代码,查看当前数据库中归档日志的使用情况: SELECT DEST_ID,TARGET,DB_UNIQUE_NAME,DESTINATION,STATUS,ERROR,HISTORY_RETENTION_TAR…

    database 2023年5月22日
    00
  • SQL Server 2008 R2:error 26 开启远程连接详解

    SQL Server 2008 R2: error 26 开启远程连接详解 概述 在使用SQL Server 2008 R2时,如果需要使用远程连接功能,则需要进行一定的配置。在进行配置时可能会遇到“error 26”错误,本文将会详细讲解如何在SQL Server 2008 R2中开启远程连接以及如何解决“error 26”错误。 确认已打开TCP/IP协…

    database 2023年5月21日
    00
  • Oracle Decode()函数使用技巧分享

    Oracle Decode()函数使用技巧分享 Oracle的Decode()函数是一种非常强大的数据转换函数,可以根据给定的条件在多个选项中进行选择,并返回匹配的值。在本篇攻略中,我们将讲解如何使用Decode()函数完成常见的数据转换任务,并提供两个使用示例。 函数介绍 Decode()函数的语法如下: DECODE(expr, search1, res…

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