activiti配置类总结

项目地址:activiti-workflow
activiti提供的配置类说明
activiti配置类总结_第1张图片

  1. EngineServices:该接口中定义了获取各种服务类实例对象的方法。
  2. ProcessEngine:继承EngineServices接口, 并增加了对流程引擎名称的获取以及关闭流程引擎的支持。
  3. ProcessEngineImpl:对ProcessEngine接口中定义的方法进行实现。
  4. Process Engines:该类负责管理所有的流程引擎ProcessEngine集合, 并负责流程引擎实例对象的注册、获取、注销等操作。
    5)ProcessEngineConfiguration:该抽象类实现EngineService b接口, 提供了一系列创建流程引擎配置ProcessEngineConfiguration实例对象的方法。
    6) ProcessEngineConfigurationImpl, 该抽象类继承ProcessEngineConfiguration, 负责创建一系列服务类实例对象、流程引擎实例对象以及ProcessEngineImpl类实例对象。该类可以通过流程配置文件交给Spring容器管理或者使用编程方式动态构造。
    7) SpringProcessEngineConfiguration:主要用于整合Spring框架时使用, 提供几个重要功能:创建流程引擎实例对象,流程引擎启动之后自动部署配置的流程文档(需要设置),设置流程引擎连接的数据源、事务管理器等。
  5. StandaloneProcessEngineConfiguration:标准的流程引擎配置类。
  6. MultiSchemaMultiTenantProcessEngineConfiguration:“多数据库多租户”流程引擎配置类, Activit通过此类为开发人员提供了自动路由机制, 这样当流程引擎需要连接多个数据库进行操作时,客户端无须关心引擎到底连接的是哪一个数据库,该类通过路由规则自动选择需要操作的数据库,数据库的操作对客户端来说是透明的,客户端无须关心其内部路由实现机制。
  7. JtaProcessEngineConfiguration:顾名思义, 通过类名也知道该类支持JTA.
  8. StandaloneInMemProcessEngineConfiguration, 该类通常可以在开发环境中自测使用,默认采用H2数据库存储数据。
  9. 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_SIGNALACTIVITY_STARTED,这会根据节点的类型(边界事件,事件子流程开始事件)
org.activiti...ActivitiMessageEvent
ACTIVITY_ERROR_RECEIVED
一个节点收到了一个错误事件。在节点实际处理错误之前触发。 事件的 activityId对应着处理错误的节点。 这个事件后续会是 ACTIVITY_SIGNALLEDACTIVITY_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
activiti配置类总结_第2张图片
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
activiti配置类总结_第3张图片
TaskListener的事件类型有
• create:节点创建
• assignmnet:审批人改变
• complete:节点结束
• delete:节点删除

@Slf4j
@Component
public class TaskCompleteListener implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
        log.info("############任务离开通知###############");
    }
}

你可能感兴趣的:(activiti)