工作流引擎flowable基于springboot下,命令模式实现源码分析

  1. 如果我们是基于springboot下部署flowable,一般需要继承实现接口org.flowable.spring.boot.EngineConfigurationConfigurer,类似
@Configuration
public class MyFlowableConfig implements EngineConfigurationConfigurer {
  @Override
    public void configure(SpringProcessEngineConfiguration engineConfiguration) {
      //做你想做的事
    }
}
  1. 在使用flowable的api时,经常会看到如下代码


    image.png

    这就是flowable的命令模式执行代码。在执行完成任务时,它还有附加执行了哪些代码呢?实际上,我认为应该还有责任链设计模式在里面。

  2. 回到类org.flowable.spring.SpringProcessEngineConfiguration。如果我们按第一步骤实现了EngineConfigurationConfigurer接口,在启动springboot的web工程时,会初始化类org.flowable.spring.SpringProcessEngineConfiguration。

  3. org.flowable.spring.SpringProcessEngineConfiguration类初始化,所做的事

  4. 查看org.flowable.spring.SpringProcessEngineConfiguration的父类org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl


    image.png

在init()方法里,有一大堆的初始化。有个方法initCommandExecutors();


image.png

方法initCommandExecutors里的内容如下


image.png

方法initCommandInterceptors里的getDefaultCommandInterceptors内容


image.png

创建了各种拦截器,也就是当执行某个命令时,会执行这些拦截器。(包括了日志、事务等拦截器)
例如当执行taskService.complete完成任务时,会被事务拦截器拦截,启动事务等其它功能,如果需要我们也可以自定义拦截器

方法initCommandExecutor里的内容如下


image.png
image.png

把各个拦截器命令串联起来

  1. 如果看懂了flowable的这个命令设计模式,搞懂flowable的执行顺序,单步调试flowable的代码就比较容易了。并且也可以很好的扩展flowable的功能。

你可能感兴趣的:(工作流引擎flowable基于springboot下,命令模式实现源码分析)