activiti提供的配置类说明
- EngineServices:该接口中定义了获取各种服务类实例对象的方法。
- ProcessEngine:继承EngineServices接口, 并增加了对流程引擎名称的获取以及关闭流程引擎的支持。
- ProcessEngineImpl:对ProcessEngine接口中定义的方法进行实现。
- Process Engines:该类负责管理所有的流程引擎ProcessEngine集合, 并负责流程引擎实例对象的注册、获取、注销等操作。
5)ProcessEngineConfiguration:该抽象类实现EngineService b接口, 提供了一系列创建流程引擎配置ProcessEngineConfiguration实例对象的方法。
6) ProcessEngineConfigurationImpl, 该抽象类继承ProcessEngineConfiguration, 负责创建一系列服务类实例对象、流程引擎实例对象以及ProcessEngineImpl类实例对象。该类可以通过流程配置文件交给Spring容器管理或者使用编程方式动态构造。
7) SpringProcessEngineConfiguration:主要用于整合Spring框架时使用, 提供几个重要功能:创建流程引擎实例对象,流程引擎启动之后自动部署配置的流程文档(需要设置),设置流程引擎连接的数据源、事务管理器等。 - StandaloneProcessEngineConfiguration:标准的流程引擎配置类。
- MultiSchemaMultiTenantProcessEngineConfiguration:“多数据库多租户”流程引擎配置类, Activit通过此类为开发人员提供了自动路由机制, 这样当流程引擎需要连接多个数据库进行操作时,客户端无须关心引擎到底连接的是哪一个数据库,该类通过路由规则自动选择需要操作的数据库,数据库的操作对客户端来说是透明的,客户端无须关心其内部路由实现机制。
- JtaProcessEngineConfiguration:顾名思义, 通过类名也知道该类支持JTA.
- StandaloneInMemProcessEngineConfiguration, 该类通常可以在开发环境中自测使用,默认采用H2数据库存储数据。
- EngineServices提供的服务类如下
• RepositoryService:提供一系列操作流程定义的方法。
• RuntimeService:提供一系列操作流程实例的方法。
• Form Service:提供一系列操作流程表单的方法。
• Task Service:提供一系列操作任务的方法, 例如任务的完成、挂起、激活、添加处理人、认领、删除等操作。
• History Service:提供一系列查询历史流程实例、历史变量、历史任务的方法。
• Identity Service:提供一系列操作用户或者组的方法。
• Management Service:提供查询数据库表中的数据、表的元数据以及执行命令等方法。
在ProcessEngineConfigurationImpl中,buildProcessEngine方法会调用init() 方法初始化ProcessEngineConfigurationImpl实例对象的各种属性
• initConfigurators() ; //初始化配置器
• configuratorsBeforeInit() ; //调用配置器的before In it方法
• initProcessDiagramGenerator() ; //初始化流程图片生成器
• initHistoryLevel() ; //初始化历史记录归档级别, 默认为AUDIT级别
• initExpressionManager() ; //初始化表达式管理器
• initDataSource() ; //初始化数据源
• initVariable Types() ; //初始化变量类型
• initBeans() ; //初始化可以管理的bean
• initFormEngines() ; //初始化表单引擎
• initFormTypes() ; //初始化表单类型
• initScripting Engines() ; //初始化脚本引擎
• initClock() ; //初始化时间类,主要负责提供设置当前时间等
• initBusinessCalendarManager() ; //初始化日期管理器
• initCommandContextFactory() ; //初始化命令上下文工厂
• initTransactionContextFactory() ; //初始化事务上下文工厂
• initCommandExecutors() ; //初始化命令执行器
• initServices() ; //为各种服务类对象, 比如repositoryService设置命令执行器
• in it Id Generator() ;//初始化 id 生成器
• initDeployers() ;//初始化部署器
• initJobHandlers() ;//始化定时处理类
• initJobExecutor() ;//初始化定时任务执行器
• initAsyncExecutor() ;//初始化异步执行器
• initTransactionFactory() ;//初始化事务工厂
• initSqlSessionFactory() ;//初始化 Sql Session 工厂
• initSessionFactories() ;//初始化 Session 工厂
• initJpa() ;//初始化 JPA
• initDelegateInterceptor() ;//负责处理拦截器默认实现类(拦截监听器或者表达式)
• initEvent Handlers() ;//初始化事件处理类
• initFailedJobCommandFactory() ;//初始化失败命令工厂
等等。
流程配置
在Spring boot项目中只需实现ProcessEngineConfigurationConfigurer实现configure方法,根据需求设置属性
@Component
public class WorkflowConfigurationConfigurer implements ProcessEngineConfigurationConfigurer {
@Autowired
private DataSource dataSource;
/**
* 实现ActivitiEventListener
*/
@Autowired
private WorkflowEventListener workflowEventListener;
@Override
public void configure(SpringProcessEngineConfiguration processEngineConfiguration) {
//配置全局监听器
List<ActivitiEventListener> eventListeners =new ArrayList<>();
eventListeners.add(workflowEventListener);
processEngineConfiguration.setEventListeners(eventListeners);
//自定义查询
Set<Class<?>> mappers = processEngineConfiguration.getCustomMybatisMappers();
if (mappers == null) {
mappers = new HashSet<>();
}
mappers.add(CustomActivitiDatabaseMapper.class);
processEngineConfiguration.setCustomMybatisMappers(mappers);
Set<String> mapperXmls = processEngineConfiguration.getCustomMybatisXMLMappers();
if (mapperXmls == null) {
mapperXmls = new HashSet<>();
}
mapperXmls.add("mapper/CustomActivitiDatabaseMapper.xml");
processEngineConfiguration.setCustomMybatisXMLMappers(mapperXmls);
//自定义表单类型
List<AbstractFormType> customFormTypes = new ArrayList<>();
customFormTypes.add(new DropdownFormType());
processEngineConfiguration.setCustomFormTypes(customFormTypes);
}
}
事件名称 描述 事件类型
ENGINE_CREATED
监听器监听的流程引擎已经创建完毕,并准备好接受API调用。
org.activiti...ActivitiEvent
ENGINE_CLOSED
监听器监听的流程引擎已经关闭,不再接受API调用。
org.activiti...ActivitiEvent
ENTITY_CREATED
创建了一个新实体。实体包含在事件中。
org.activiti...ActivitiEntityEvent
ENTITY_INITIALIZED
创建了一个新实体,初始化也完成了。如果这个实体的创建会包含子实体的创建,这个事件会在子实体都创建/初始化完成后被触发,这是与 ENTITY_CREATED的区别。
org.activiti...ActivitiEntityEvent
ENTITY_UPDATED
更新了已存在的实体。实体包含在事件中。
org.activiti...ActivitiEntityEvent
ENTITY_DELETED
删除了已存在的实体。实体包含在事件中。
org.activiti...ActivitiEntityEvent
ENTITY_SUSPENDED
暂停了已存在的实体。实体包含在事件中。会被ProcessDefinitions, ProcessInstances 和 Tasks抛出。
org.activiti...ActivitiEntityEvent
ENTITY_ACTIVATED
激活了已存在的实体,实体包含在事件中。会被ProcessDefinitions, ProcessInstances 和 Tasks抛出。
org.activiti...ActivitiEntityEvent
JOB_EXECUTION_SUCCESS
作业执行成功。job包含在事件中。
org.activiti...ActivitiEntityEvent
JOB_EXECUTION_FAILURE
作业执行失败。作业和异常信息包含在事件中。
org.activiti...ActivitiEntityEvent and org.activiti...ActivitiExceptionEvent
JOB_RETRIES_DECREMENTED
因为作业执行失败,导致重试次数减少。作业包含在事件中。
org.activiti...ActivitiEntityEvent
TIMER_FIRED
触发了定时器。job包含在事件中。
org.activiti...ActivitiEntityEvent
JOB_CANCELED
取消了一个作业。事件包含取消的作业。作业可以通过API调用取消, 任务完成后对应的边界定时器也会取消,在新流程定义发布时也会取消。
org.activiti...ActivitiEntityEvent
ACTIVITY_STARTED
一个节点开始执行
org.activiti...ActivitiActivityEvent
ACTIVITY_COMPLETED
一个节点成功结束
org.activiti...ActivitiActivityEvent
ACTIVITY_SIGNALED
一个节点收到了一个信号
org.activiti...ActivitiSignalEvent
ACTIVITY_MESSAGE_RECEIVED
一个节点收到了一个消息。在节点收到消息之前触发。收到后,会触发 ACTIVITY_SIGNAL或 ACTIVITY_STARTED,这会根据节点的类型(边界事件,事件子流程开始事件)
org.activiti...ActivitiMessageEvent
ACTIVITY_ERROR_RECEIVED
一个节点收到了一个错误事件。在节点实际处理错误之前触发。 事件的 activityId对应着处理错误的节点。 这个事件后续会是 ACTIVITY_SIGNALLED或 ACTIVITY_COMPLETE, 如果错误发送成功的话。
org.activiti...ActivitiErrorEvent
UNCAUGHT_BPMN_ERROR
抛出了未捕获的BPMN错误。流程没有提供针对这个错误的处理器。 事件的 activityId为空。
org.activiti...ActivitiErrorEvent
ACTIVITY_COMPENSATE
一个节点将要被补偿。事件包含了将要执行补偿的节点id。
org.activiti...ActivitiActivityEvent
VARIABLE_CREATED
创建了一个变量。事件包含变量名,变量值和对应的分支或任务(如果存在)。
org.activiti...ActivitiVariableEvent
VARIABLE_UPDATED
更新了一个变量。事件包含变量名,变量值和对应的分支或任务(如果存在)。
org.activiti...ActivitiVariableEvent
VARIABLE_DELETED
删除了一个变量。事件包含变量名,变量值和对应的分支或任务(如果存在)。
org.activiti...ActivitiVariableEvent
TASK_ASSIGNED
任务被分配给了一个人员。事件包含任务。
org.activiti...ActivitiEntityEvent
TASK_CREATED
创建了新任务。它位于 ENTITY_CREATE事件之后。当任务是由流程创建时, 这个事件会在TaskListener执行之前被执行。
org.activiti...ActivitiEntityEvent
TASK_COMPLETED
任务被完成了。它会在 ENTITY_DELETE事件之前触发。当任务是流程一部分时,事件会在流程继续运行之前, 后续事件将是 ACTIVITY_COMPLETE,对应着完成任务的节点。
org.activiti...ActivitiEntityEvent
TASK_TIMEOUT
任务已超时,在 TIMER_FIRED事件之后,会触发用户任务的超时事件, 当这个任务分配了一个定时器的时候。
org.activiti...ActivitiEntityEvent
PROCESS_COMPLETED
流程已结束。在最后一个节点的 ACTIVITY_COMPLETED事件之后触发。 当流程到达的状态,没有任何后续连线时, 流程就会结束。
org.activiti...ActivitiEntityEvent
MEMBERSHIP_CREATED
用户被添加到一个组里。事件包含了用户和组的id。
org.activiti...ActivitiMembershipEvent
MEMBERSHIP_DELETED
用户被从一个组中删除。事件包含了用户和组的id。
org.activiti...ActivitiMembershipEvent
MEMBERSHIPS_DELETED
所有成员被从一个组中删除。在成员删除之前触发这个事件,所以他们都是可以访问的。 因为性能方面的考虑,不会为每个成员触发单独的 MEMBERSHIP_DELETED事件。
org.activiti...ActivitiMembershipEvent
流程监听器设置
实现ActivitiEventListener,根据需求监听事件类型
@Component
@Slf4j
public class WorkflowEventListener implements ActivitiEventListener {
@Lazy
@Autowired
private RuntimeService runtimeService;
@Lazy
@Autowired
private TaskService taskService;
@Override
public boolean isFailOnException() {
return false;
}
@Override
public void onEvent(ActivitiEvent event) {
log.info("onEvent:{}", ToStringBuilder.reflectionToString(event, ToStringStyle.JSON_STYLE));
switch (event.getType()) {
// 任务创建
case TASK_CREATED:
log.info("...正在执行创建任务事件...");
break;
case TASK_COMPLETED:
log.info("...任务审批完成...");
break;
// 流程结束
case PROCESS_COMPLETED:
log.info("...流程结束...");
break;
default:
log.info("default");
}
}
}
节点监听器设置
配置方式
• ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION }:java类的全路径,配置为${com.deepexi.workflow.Test}。这种实现类不能注入Springbean。
• ImplementationType.IMPLEMENTATION_TYPE_EXPRESSION执行特定类的特定方法 配置}为${test.test()}
• ImplementationType.IMPLEMENTATION_TYPE_DELEGATEEXPRESSION,配置spring的bean为${test}。实现类交由spring管理。
节点设置的监听器可实现ExecutionListener或TaskListener
节点配置ExecutionListener
ExecutionListener的事件类型有
• start:节点创建
• task:连线到达节点
• end:节点结束
@Slf4j
@Component
public class TaskStartListener implements ExecutionListener {
//配置时设置的变量
private Expression code;
@Override
public void notify(DelegateExecution execution) {
log.info("节点开始创建,编码为:" + code.getExpressionText());
}
}
节点配置TaskListener
TaskListener的事件类型有
• create:节点创建
• assignmnet:审批人改变
• complete:节点结束
• delete:节点删除
@Slf4j
@Component
public class TaskCompleteListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
log.info("############任务离开通知###############");
}
}
转载:https://blog.csdn.net/qq_34758074/article/details/105517137
查看评论