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 结束事件 顾名思义。。。
-
其他的没怎么用 实现不了的时候再看吧。