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日

相关文章

  • Redis实现简单消息队列

    public static void main(String[] args) { Jedis jedis = new Jedis(“10.0.130.103”,6379); jedis.lpush(“task-queue”, “123”);//装入队列 jedis.lpush(“task-queue”, “456”);//装入队列 //获取队列消息 Syst…

    Redis 2023年4月13日
    00
  • 在MySQL中创建实现自增的序列(Sequence)的教程

    在MySQL中创建实现自增的序列,可以使用自增主键、触发器和存储过程等方式实现。下面是具体的攻略: 使用自增主键 创建表时,指定主键字段的类型为INT AUTO_INCREMENT,并将该字段设为主键,代码如下: CREATE TABLE demo ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) )…

    database 2023年5月21日
    00
  • Linux下mysql5.6.33安装配置教程

    Linux下MySQL5.6.33安装配置教程 1. 下载MySQL5.6.33安装包 从官网下载Linux版本的MySQL5.6.33安装包,下载链接为https://dev.mysql.com/downloads/mysql/5.6.html,选择对应的Linux版本进行下载。 2. 安装MySQL5.6.33 (1)解压安装包 $ tar zxvf m…

    database 2023年5月21日
    00
  • Oracle导出excel数据

    下面是Oracle导出Excel数据的完整攻略: 1. 安装PL/SQL Developer PL/SQL Developer 是一个数据库开发工具,可以用它来导出 Excel 数据。可以从官网或其他渠道下载安装。安装完成后,打开工具并连接到要导出数据的数据库。 2. 创建一个SQL查询 创建一个SQL查询,从数据库中选择数据。例如,下面的 SQL 语句将从…

    database 2023年5月21日
    00
  • Windows下mysql 5.7 设置区分大小写(敏感),设置默认编码 utf8mb4

    下面是针对在Windows系统下MySQL 5.7设置区分大小写和设置默认编码为utf8mb4的完整攻略。 步骤一:修改配置文件 默认情况下,Windows下安装的MySQL 5.7版本的配置文件位于 C:\ProgramData\MySQL\MySQL Server 5.7\my.ini,我们需要修改这个文件。 1.1 打开 my.ini 文件,在 [my…

    database 2023年5月22日
    00
  • MySQL修改、删除数据库表字段

    MySQL是一款常用的关系型数据库管理系统,提供了相应的命令和语法来对表进行修改和删除字段。本文将详细介绍MySQL修改、删除表字段的方法,并给出实例说明。 MySQL修改表字段的方法 修改字段名称 使用ALTER TABLE语句,可用于修改字段的名称。 语法: ALTER TABLE 表名 RENAME COLUMN 原字段名 TO 新字段名; 示例如下:…

    MySQL 2023年3月9日
    00
  • 如何使用Python获取数据库中的表结构信息?

    要使用Python获取数据库中的表结构信息,可以使用Python的内置模块sqlite3或第三方库mysql-connector-python。以下是使用mysql-connector-python获取数据库中的表结构信息的完整攻略: 连接数据库 要连接到数据库,需要提供数据库的主机名、用户名、和数据库。可以使用以下代码连接MySQL: import mys…

    python 2023年5月12日
    00
  • Windows Server2012 R2 无法安装.NET Framework 3.5的解决方法

    针对“Windows Server 2012 R2 无法安装.NET Framework 3.5”的问题,我们可以采取以下两种方法解决: 方法一:通过Windows Server 2012 R2安装媒体进行安装 确认已插入Windows Server 2012 R2 ISO文件或安装光盘。 通过PowerShell以管理员身份运行以下命令: dism /on…

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