- 如果我们是基于springboot下部署flowable,一般需要继承实现接口org.flowable.spring.boot.EngineConfigurationConfigurer,类似
@Configuration
public class MyFlowableConfig implements EngineConfigurationConfigurer<SpringProcessEngineConfiguration> {
@Override
public void configure(SpringProcessEngineConfiguration engineConfiguration) {
//做你想做的事
}
}
-
在使用flowable的api时,经常会看到如下代码
image.png
这就是flowable的命令模式执行代码。在执行完成任务时,它还有附加执行了哪些代码呢?实际上,我认为应该还有责任链设计模式在里面。
-
回到类org.flowable.spring.SpringProcessEngineConfiguration。如果我们按第一步骤实现了EngineConfigurationConfigurer接口,在启动springboot的web工程时,会初始化类org.flowable.spring.SpringProcessEngineConfiguration。
-
org.flowable.spring.SpringProcessEngineConfiguration类初始化,所做的事
-
查看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
把各个拦截器命令串联起来
- 如果看懂了flowable的这个命令设计模式,搞懂flowable的执行顺序,单步调试flowable的代码就比较容易了。并且也可以很好的扩展flowable的功能。
网友评论