专栏首页JAVA后端开发flowable实现流程全局事件

flowable实现流程全局事件

最近在研究flowable,发现这个东东虽说是activiti的升级版,但感觉还是没有a5的好用。 项目中需要实现一个全局事件,实现如下:

  • 实现flowable的配置
@Bean
    public EngineConfigurationConfigurer<SpringProcessEngineConfiguration> customIdGeneratorConfigurer() {
        return engineConfiguration -> {engineConfiguration.setIdGenerator( customIdGenerator());
            engineConfiguration.setActivityBehaviorFactory(activityBehaviorFactory());
            engineConfiguration.setTransactionManager(transactionManager);
            //设置全局事件监听
            engineConfiguration.setTypedEventListeners(this.getGlobalFlowableEventListener());

        };
    }
    
    /**
     * 设置系统级别监听器
     *
     * @return
     */
    private Map<String, List<FlowableEventListener>> getGlobalFlowableEventListener() {
        Map<String, List<FlowableEventListener>> typedListeners = new HashMap<String, List<FlowableEventListener>>();

        List<FlowableEventListener> processCompleteList = new ArrayList<FlowableEventListener>();
        processCompleteList.add(new ProcessEndListener());
        typedListeners.put("PROCESS_COMPLETED", processCompleteList);

        return typedListeners;

    }

上述方法中,实现了流程结束时,自动触发全局事件ProcessEndListener

  • 继承监听器FlowableEventListener,ProcessEndListener源码如下:
/**
 * 流程结束修改状态
 */
public class ProcessEndListener implements FlowableEventListener {

    private static final long serialVersionUID = 1L;


    @Override
    public void onEvent(FlowableEvent event) {
        FlowableEngineEventImpl  engineEvent=(FlowableEngineEventImpl)event;
        SpringContextUtils.getApplicationContext().publishEvent(new ProcessEndEvent(engineEvent,engineEvent.getProcessInstanceId()));
    }


    @Override
    public boolean isFailOnException() {
        return false;
    }

    @Override
    public boolean isFireOnTransactionLifecycleEvent() {
        return false;
    }

    @Override
    public String getOnTransaction() {
        return null;
    }
}

我上述代码只是广播了一下spring 事件,让代码实现与流程引擎的解耦。 PS:flowable实现监听器我个人认为比A5差了,他的参数只有一个FlowableEvent,这个接口没法取到相关参数,必须要强转型为FlowableEngineEventImpl才可以。 而Activiti5没有这种操作,感觉使用上比a5差了一点! 至此,全局监听事件完成!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • spring secutiry密码验证的另一种解决办法(荐)

    最近在集成sping security 到spring boot中,看到大部分登陆验证的代码都这么写

    星痕
  • JWT的TOKEN续期功能

    JWT里有一个关键的东东,就是续期TOKEN,即TOKEN快过期时,刷新一个新的TOKEN给客户端. 办法如下: 1.后端生成TOKEN

    星痕
  • spring webmvc转webflux的初步尝试

    最近在看api网关的源码,发现他用的是webflux,对这个挺感兴趣,所以尝试将手上的项目改成webflux

    星痕
  • SpringCloud微服务:Zuul组件,实现路由网关控制

    知了一笑
  • 「 从0到1学习微服务SpringCloud 」12 Zuul的综合使用

    1.新建一个类,继承ZuulFilter,细节方面看下面代码,还有别忘了在类上加@Component注解,否则不生效

    KEN DO EVERTHING
  • 实战系列之注入用户信息的几种方法

    web项目中一般用户信息是通过加密处理放在cookie中的,如果每个需要用户信息的接口都要去cookie中获取然后解密得到用户信息的话就比较麻烦,这里介绍的就是...

    开发架构二三事
  • 聊聊resilience4j的fallback

    vavr-0.9.2-sources.jar!/io/vavr/control/Try.java

    codecraft
  • 聊聊skywalking的spring-cloud-gateway-plugin

    本文主要研究一下skywalking的spring-cloud-gateway-plugin

    codecraft
  • 聊聊skywalking的spring-cloud-gateway-plugin

    本文主要研究一下skywalking的spring-cloud-gateway-plugin

    codecraft
  • zuul 请求重写

    用户1418372

扫码关注云+社区

领取腾讯云代金券