文章目录
- Activiti项目搭建
- 引用依赖项
- Activiti服务初始化
- 数据库配置
- 配置文件
- 测试demo
- Activiti功能服务
- RepositoryService:
- RuntimeService:
- TaskService:
- HistoryService:
- ManagementService:
- DynamicBpmnService:
- Activiti表分类
Activiti项目搭建
引用依赖项
<activiti.version>7.0.0.Beta1</activiti.version><dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>${activiti.version}</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>${activiti.version}</version></dependency><!-- bpmn 模型处理 --><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-model</artifactId><version>${activiti.version}</version></dependency><!-- bpmn 转换 --><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-converter</artifactId><version>${activiti.version}</version></dependency><!-- bpmn json数据转换 --><dependency><groupId>org.activiti</groupId><artifactId>activiti-json-converter</artifactId><version>${activiti.version}</version></dependency><!-- bpmn 布局 --><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-layout</artifactId><version>${activiti.version}</version></dependency><!-- activiti 云支持 --><dependency><groupId>org.activiti.cloud</groupId><artifactId>activiti-cloud-services-api</artifactId><version>${activiti.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency>
Activiti服务初始化
@Configuration
public class ActivitiConfiguration {@Autowired@Qualifier("dataSource")private BasicDataSource DataSource;@Autowiredprivate PlatformTransactionManager platformTransactionManager;/*** 注册 activiti的配置信息*/@Bean("processEngineConfiguration")public SpringProcessEngineConfiguration getProcessEngineConfiguration(){SpringProcessEngineConfiguration configuration= new SpringProcessEngineConfiguration();configuration.setDataSource(DataSource); // 添加数据源configuration.setTransactionManager(platformTransactionManager); // 添加事务configuration.setDatabaseSchemaUpdate("true"); // 如果有表则不创建configuration.setDbHistoryUsed(true); // 允许查看历史信息configuration.buildProcessEngine(); //执行创建25张表,如果已经创建就不再创建了// 自动部署 bpmn文件Resource[] resources = null;try {resources= new PathMatchingResourcePatternResolver().getResources("classpath*:bpmn/*.bpmn20.xml");} catch (IOException e) {e.printStackTrace();}configuration.setDeploymentResources(resources);return configuration;}/*** 注册 ProcessEngineFactoryBean*/@Beanpublic ProcessEngineFactoryBean processEngine(){ProcessEngineFactoryBean factoryBean = new ProcessEngineFactoryBean();factoryBean.setProcessEngineConfiguration(getProcessEngineConfiguration());return factoryBean;}/*** 注册 RepositoryService*/@Beanpublic RepositoryService repositoryService() throws Exception{return processEngine().getObject().getRepositoryService();}/*** 注册 RuntimeService*/@Beanpublic RuntimeService runtimeService() throws Exception{return processEngine().getObject().getRuntimeService();}/*** 注册 TaskService*/@Beanpublic TaskService taskService() throws Exception{return processEngine().getObject().getTaskService();}/*** 注册 HistoryService*/@Beanpublic HistoryService historyService() throws Exception{return processEngine().getObject().getHistoryService();}
}
数据库配置
@Configuration
public class DataSourceConfiguration {@Bean("dataSource")public BasicDataSource getDruidDataSource(@Value("${spring.datasource.driver-class-name}")String driverClassName, // 数据库驱动程序@Value("${spring.datasource.url}")String url, // 数据库连接地址@Value("${spring.datasource.username}")String username, // 数据库的用户名@Value("${spring.datasource.password}")String password, // 数据库的用户名@Value("${spring.datasource.tomcat.min-idle}")int minIdle, // 最小维持连接数@Value("${spring.datasource.tomcat.max-active}")int maxActive // 最大连接数) {BasicDataSource dataSource = new BasicDataSource(); // 实例化DataSource子类对象dataSource.setDriverClassName(driverClassName); // 数据库驱动程序dataSource.setUrl(url); // 数据库的连接地址dataSource.setUsername(username); // 数据库用户名dataSource.setPassword(password); // 数据库密码dataSource.setMinIdle(minIdle); // 最小维持的连接数量dataSource.setMaxActive(maxActive); // 最大的连接数量return dataSource;}}
配置文件
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql:///activiti_dev?nullCatalogMeansCurrent=trueusername: rootpassword: 123456tomcat:max-active: 3min-idle: 1
测试demo
这是使用springboot项目创建的测试用例
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.persistence.entity.HistoricFormPropertyEntity;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
class BpmDemoApplicationTests {@Autowiredprivate RuntimeService runtimeService;@Autowiredprivate TaskService taskService;@Autowiredprivate RepositoryService repositoryService;@Testvoid contextLoads() {}/*** @description: 创建审批* @author: gepengjun* @date: 2023/9/3 17:31* @param: []* @return: void**/@Testpublic void testCreateProcessInstance(){ProcessInstance test1 = runtimeService.startProcessInstanceByKey("test1");System.out.println("流程示例id:"+test1.getId());}/*** @description: 完成任务* @author: gepengjun* @date: 2023/9/3 17:31* @param:* @return: void**/@Testpublic void testComplete(){taskService.setVariable("37505","variable",true);taskService.complete("37505");}/*** @description: 设置流程实例变量* @author: gepengjun* @date: 2023/9/3 18:34* @param: []* @return: void**/@Testpublic void testProcessInstanceVariable(){runtimeService.setVariable("12506","taskTest","任务完成没有");}/*** @description: 获取流程实例变量* @author: gepengjun* @date: 2023/9/3 18:34* @param: []* @return: void**/@Testpublic void testGetProcessInstanceVariable(){Object taskTest = runtimeService.getVariable("30001", "taskTest");System.out.println("这是流程实例变量:"+taskTest.toString());}/*** @description: 在使用task服务获取流程实例变量* @author: gepengjun* @date: 2023/9/3 18:34* @param: []* @return: void**/@Testpublic void testTaskGetProcessInstanceVariable(){Object taskTest = taskService.getVariable("30005", "taskTest");System.out.println("使用Task服务获取流程实例变量:"+taskTest.toString());}/*** @description: 查询对应节点任务* @author: gepengjun* @date: 2023/9/3 17:31* @param: []* @return: void**/@Testpublic void testByUserName(){//根据节点名称获取指定流程实例的任务//List<Task> tasks = taskService.createTaskQuery().processInstanceId("37501").taskName("科长").list();//获取所有节点名称为“科长”的任务List<Task> tasks = taskService.createTaskQuery().taskName("高经理").list();for (Task task : tasks) {System.out.println("任务名称:"+task.getName());System.out.println("任务ID:"+task.getId());System.out.println("_______________________________");}}/*** @description: 删除流程模板* @author: gepengjun* @date: 2023/9/3 18:35* @param: []* @return: void**/@Testpublic void testRepositoryService(){repositoryService.deleteDeployment("1");}}
Activiti功能服务
RepositoryService:
RepositoryService 是 Activiti 中的一个服务接口,用于管理流程定义和部署的操作。通过 RepositoryService,可以执行以下一些常见的操作:
-
部署流程定义:使用
createDeployment()
方法创建一个新的部署对象,并通过addInputStream()
、addClasspathResource()
等方法添加流程定义的资源文件,在最后使用deploy()
方法将流程定义部署到引擎中进行使用。 -
查询流程定义:使用
createProcessDefinitionQuery()
方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据流程定义的名称、版本号等进行查询。 -
获取流程定义资源:使用
getResourceAsStream()
方法可以获取流程定义的资源文件,例如获取流程图、流程定义的 XML 文件等。 -
删除流程定义:使用
deleteDeployment()
方法可以删除已部署的流程定义及其相关资源。
RuntimeService:
RuntimeService 是 Activiti 中的一个服务接口,用于管理流程实例的操作。通过 RuntimeService,可以执行以下一些常见的操作:
-
启动流程实例:使用
startProcessInstanceByKey()
方法根据流程定义的键启动一个新的流程实例,或者使用startProcessInstanceById()
方法根据流程定义的ID启动流程实例。 -
查询流程实例:使用
createProcessInstanceQuery()
方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据流程实例的ID、流程定义的Key等进行查询。 -
暂停和恢复流程实例:使用
suspendProcessInstanceById()
方法暂停指定ID的流程实例,使用activateProcessInstanceById()
方法恢复暂停的流程实例。 -
查询任务:使用
createTaskQuery()
方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据任务的ID、任务的负责人等进行查询。 -
设置和获取流程实例变量:使用
setVariable()
方法设置流程实例的变量,使用getVariable()
方法获取流程实例的变量。
TaskService:
TaskService 是 Activiti 中的一个服务接口,用于管理任务的操作。通过 TaskService,您可以执行以下一些常见的任务相关的操作:
-
查询任务:使用
createTaskQuery()
方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据任务的ID、负责人、所属流程实例等进行查询。 -
完成任务:使用
complete()
方法完成指定ID的任务,可以同时设置任务的执行人、变量等信息。 -
指派任务:使用
setAssignee()
方法将任务指派给指定的用户或组。 -
委派任务:使用
delegateTask()
方法将任务委派给其他人处理。 -
签收任务:使用
claim()
方法将任务签收,将当前用户设置为任务的负责人。 -
设置和获取任务变量:使用
setVariable()
方法设置任务的变量,使用getVariable()
方法获取任务的变量。 -
创建附件和评论:使用
createAttachment()
方法创建任务的附件,使用addComment()
方法添加任务的评论。
HistoryService:
HistoryService 是 Activiti 中的一个服务接口,用于管理历史数据的操作。通过 HistoryService,您可以执行以下一些常见的历史数据相关的操作:
-
查询历史流程实例:使用
createHistoricProcessInstanceQuery()
方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据流程实例的ID、流程定义的Key等进行查询。 -
查询历史任务:使用
createHistoricTaskInstanceQuery()
方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据任务的ID、所属流程实例、负责人等进行查询。 -
查询历史活动:使用
createHistoricActivityInstanceQuery()
方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据活动的ID、所属流程实例、活动类型等进行查询。 -
查询历史变量:使用
createHistoricVariableInstanceQuery()
方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据变量的名称、所属流程实例等进行查询。 -
查询历史表单数据:使用
createHistoricFormDataQuery()
方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据表单的ID、所属流程实例等进行查询。
ManagementService:
ManagementService 是 Activiti 中的一个服务接口,用于管理引擎相关的操作。通过 ManagementService,您可以执行以下一些常见的引擎管理操作:
-
执行作业:使用
executeJob()
方法手动触发执行作业,例如定时任务、异步任务等。 -
暂停和恢复作业:使用
suspendJobById()
方法暂停指定ID的作业,使用activateJobById()
方法恢复暂停的作业。 -
查询作业:使用
createJobQuery()
方法创建一个查询对象,然后可以根据不同的条件进行过滤和排序,例如根据作业的ID、作业的状态、作业的类型等进行查询。 -
查询引擎表:使用
getTableName()
方法获取指定实体类对应的数据库表名,使用getTableCount()
方法获取指定表的记录数量。 -
强制执行数据库操作:使用
executeCommand()
方法执行自定义的数据库操作命令,例如 SQL 查询、SQL 更新等。 -
获取引擎配置信息:使用
getProcessEngineConfiguration()
方法获取当前引擎的配置信息,包括数据库连接信息、流程定义解析器等。
DynamicBpmnService:
DynamicBpmnService 是 Activiti 中的一个服务接口,用于动态修改流程定义和流程实例的相关内容。通过 DynamicBpmnService,您可以执行以下一些常见的动态流程操作:
-
动态修改流程定义:使用
changeDeploymentProcessDefinitionKey()
方法修改指定部署ID下流程定义的Key。 -
动态修改流程实例:使用
moveActivityIdTo()
方法将当前活动节点移动到指定的目标节点。 -
动态添加用户任务节点:使用
addUserTask()
方法在流程定义中动态添加用户任务节点。 -
动态删除节点:使用
deleteActivity()
方法删除指定节点及其关联的全部流转信息。 -
动态设置节点属性:使用
setActivityProperties()
方法设置指定节点的属性,如节点名称、节点描述等。 -
动态设置流程变量:使用
setProcessInstanceVariable()
方法设置流程实例的变量值。
Activiti表分类
在 Activiti 中,表用于存储与流程相关的数据和元数据。Activiti 从逻辑上将其分为五个类别。
- ACT_RE_*:包含“RE”表示 Repository,这些表存储了所有与 Activiti 流程定义和流程资源相关的数据和元数据。例如,这些表包括:
MN 流程
- 定义的数据。
- ACT_RE_DEPLOYMENT:保存 BPMN 文件和流程图等资源文件的数据。
-
ACT_RU_*:包含“RU”表示 Runtime,这些表存储了流程运行期间产生的运行时数据。例如,这些表包括:
- ACT_RU_TASK:保存当前待处理任务的数据。
- ACT_RU_EXECUTION:保存流程实例和执行数据。
-
ACT_ID_*:包含“ID”表示 Identity,这些表存储了用户、组和权限等身份验证相关的数据。例如,这些表包括:
- ACT_ID_USER:保存用户的数据。
- ACT_ID_GROUP:保存用户组的数据。
-
ACT_HI_*:包含“HI”表示 History,这些表存储了流程实例的历史记录和统计数据。例如,这些表包括:
- ACT_HI_PROCINST:保存流程实例的历史数据。
- ACT_HI_TASKINST:保存任务实例的历史数据。
-
ACT_GE_*:包含“GE”表示 Generic,这些表存储 Activiti 应用程序和一般工具使用的各种配置数据。例如,这些表包括:
- ACT_GE_PROPERTY:保存 Activiti 数据和配置的属性数据。
- ACT_GE_PROPERTY:保存 Activiti 数据和配置的属性数据。