activiti工作流学习笔记(一)

运行环境和集成框架

操作系统

windows10

数据库

mysql 5.6.40-log

框架和版本

SpringBoot 2.4.2 jdk1.8 activiti5.2.2 tomcat7.0.96
依赖:
<dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter-basic</artifactId>
            <version>5.22.0</version>
</dependency>

开发工具

idea 2019.2.4  
插件 File->Settings->Plugins->搜错actiBPM 搜不到需要去idea官网市场查找下载手动添加

手动添加位置
idea 2020以后actiBPM 有bug 推荐Activiti Explorer 具体配置在下面

项目配置

在application.yml里添加如下配置
 activiti:
    database-schema-update: true #是否每次都更新数据库
    # 自动部署验证设置:true-开启(默认)、false-关闭
    check-process-definitions: true # activti是否自动部署
    process-definition-location-prefix: classpath:/processes/
    #process-definition-location-suffixes: .bpmn
    history-level: full
    #db-history-used: true
    db-identity-used: false
  main:
    allow-bean-definition-overriding: true
在resource下创建processes文件夹,存放流程配置文件
创建ActivitiConfig
package com.huanyue.activiti.config;

import org.activiti.engine.*;
import org.activiti.spring.ProcessEngineFactoryBean;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;
import java.io.IOException;

/**
 * @version 1.0
 * @ClassName ActivitiConfig
 * @Description Activiti配置
 **/
@Configuration
public class ActivitiConfig{
    private Logger logger = LoggerFactory.getLogger(ActivitiConfig.class);

    @Autowired
    private DataSource dataSource;
    @Autowired
    private PlatformTransactionManager platformTransactionManager;

    @Bean
    public SpringProcessEngineConfiguration springProcessEngineConfiguration(){
        SpringProcessEngineConfiguration spec = new SpringProcessEngineConfiguration();
        spec.setDataSource(dataSource);
        spec.setTransactionManager(platformTransactionManager);
        spec.setDatabaseSchemaUpdate("true");
        Resource[] resources = null;
        // 启动自动部署流程
        try {
            resources = new PathMatchingResourcePatternResolver().getResources("classpath*:processes/*.bpmn");
        } catch (IOException e) {
            e.printStackTrace();
        }
        spec.setDeploymentResources(resources);
        return spec;
    }

    @Bean
    public ProcessEngineFactoryBean processEngine(){
        ProcessEngineFactoryBean processEngineFactoryBean = new ProcessEngineFactoryBean();
        processEngineFactoryBean.setProcessEngineConfiguration(springProcessEngineConfiguration());
        return processEngineFactoryBean;
    }


    @Bean
    public RepositoryService repositoryService() throws Exception{
        return processEngine().getObject().getRepositoryService();
    }
    @Bean
    public RuntimeService runtimeService() throws Exception{
        return processEngine().getObject().getRuntimeService();
    }
    @Bean
    public TaskService taskService() throws Exception{
        return processEngine().getObject().getTaskService();
    }
    @Bean
    public HistoryService historyService() throws Exception{
        return processEngine().getObject().getHistoryService();
    }

    @Bean
    public IdentityService identityService() throws Exception{
        return processEngine().getObject().getIdentityService();
    }
}




RepositoryService  RuntimeService TaskService HistoryService IdentityService 流程使用过程中用到的服务。
通过使用@Autowired 进行实例化.

Activiti Explorer

下载地址 [activiti官网](https://www.activiti.org/get-started)
解压放入tomcat的webapp目录下进入目录,结构如下图

在这里插入图片描述

进入WEB-INF\classes   找到db.properties 修改数据库配置
db=mysql
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/activiti?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=root
启动tomcat 启动成功后 访问 http://localhost:18080/activiti-explorer/

登陆页面

用户名密码为kermit kermit
访问数据库 可看到25张表

在这里插入图片描述

新建模型

在这里插入图片描述

输入名称后点击创建 会出现如下页面

在这里插入图片描述

  • Start event 开始事件 即流程的开始
    在这里插入图片描述

     1.id 组件ID可自定义,不填会生成一串长ID
     2.Name 为组件起名 设置后会在获取任务信息的时候获取到
     3.Documentation 可以填表达式如${value} 获取任务参数中value对应的值,代码中具体怎么获取,忘了。。。
     4.Execution listeners 配置监听事件 点开后会弹框,图就不截图了,有个Event的下拉框分为start end take控制什么时候触发,Class为自己项目中监听器的完整包名+类名 该类需实现ExecutionListener接口 Expression Delegate expression应该是什么表达式吧,具体需要用还需摸索,该弹框还可以设置fieldName 对应监听类的成员变量(应该是,具体试没试过忘了)
     5.Initiator 没设置过,也不知道有什么用,类似这种的接下来不再写了(需要继续查资料)。
    
  • UserTask 用户任务 需要用户进行操作的任务

     1.id 同上
     2.Name 同上
     3.Documentation  同上
     4.Execution listeners 同上
     5.Multi-instance type 选择Parallel 或Sequential或者None  Parallel多人操作完后才能继续下一步 Sequential 应该是轮流,比如分给三个人三个人依次操作不能同时存在
     6.Collection(Muti-instance)  Multi-instance type不是None生效 设置集合 比如users 存操作人集合 该集合长度决定并行或串行任务个数
     7.Element variable(Muti-instance) : user  设置集合元素别名
     8.Assignments  操作人 在上述情况下 使用${user} 则会将集合中的操作人赋予这个任务作为该任务操作人 Multi-instance type 为None时  ${user} 获取任务参数中 user对应的操作人
     9.Completion condition : 完成条件 可以使用自定义表达式也可以用自带的几个变量计算例 自定义 ${completed/total==1}  activiti自带属性${nrOfCompletedInstances/nrOfInstances==1}
    
  • Service task 系统任务 绑定系统类自动执行一串代码 详情略

  • Sub process 子流程 差不多,就是Multi-instance type 设置为Parallel 并行子流程可以多个流程详情略

  • Call activiti 呼叫子流程 就是子流程是单独部署的子流程 这里可以叫他过来跑,可以模拟退回,因为在并行子流程中想跳到前面再进来会有问题,直接在子流程里走退回的子流程继续往下走。自己流程中使用该任务模拟出了需求。

  • Exclusive gateway 网关 自己当分支用了,比如flag传1走任务1flag传0走任务0 详细没试过

  • End event 结束事件 顾名思义。。。

  • 其他的没怎么用 实现不了的时候再看吧。

累了,歇会。。。剩下的写到二吧。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值