XxlJob集成GooFlow工作流

一只会飞的鱼儿 1年前 ⋅ 2237 阅读
ad

背景:

    最近在研究怎么批量执行定时任务,于是在网上找到了GooFlow工作流模式可以集成到xxlJob中。下面我就介绍一下我们该如何集成,实现批量执行job的。

 

一、后端pom.xml引入相关jar包

<dependencies>
    <dependency>
        <groupId>com.xuxueli</groupId>
        <artifactId>xxl-job-core</artifactId>
        <version>${xxl-job-core.version}</version>
    </dependency>
</dependencies>

   jar中包含xxl的一些常用类,有自己的model,定义的通用ReturnT返回类型,还有非常重要的XxlJobExecutor,这个类实现了上下文,包含appname、address、ip和port端口。下面列举一些比较重要的后端实现类:

1、XxlJobSpringExecutor说明:

在项目里面需要注入XxlJobSpringExecutor.class 这个类, 就从这个类开始分析,首先其类的层次结构如下,
XxlJobSpringExecutor 继承了 XxlJobExecutor,实现了 ApplicationContextAware, DisposableBean,SmartInitializingSingleton,可以看出 ,其实整个逻辑是在类XxlJobExecutor 里面,类XxlJobSpringExecutor 是为了匹配Spring 框架而做的改造;

  • 实现ApplicationContextAware 是为了获取上下文;
  • 实现DisposableBean是为了重写destroy 方法,用于释放一些资源;
  • 实现SmartInitializingSingleton,这个比较关键,也是重点,就是在Bean 创建的生命周期里面,单例 bean 都初始化完成以后,找出带有注解的 job进行注册等一系列操作;

2、XxlJobSpringExecutor的initJobHandlerMethodRepository 方法 主要做了以下几件事:

    获取到所有的注册的beanName,针对每一个bean 进行扫描,获取带有@XxlJob 注解的方法,涉及一个工具类工具类MethodIntrospector,对每一个获带有@XxlJob 注解的方法进行校验:

  • job 名字不能为空
  • job 名字不能重复
  • 入参必须要用,而且只能有1个, 还要是String 类型
  • 返回类型 必须要是ReturnT.class获取 初始化方法init() 和 销毁方法 destroy()放入Map ,后续进行注册

二、前端引入gooflow相关组件

     前端代码引入gooflow所需要的js和css样式文件,包括它的img和fonts,在相应的html文件中引入这些js和样式文件。

三、新建批量任务

  1. 新建批次,包括任务描述、cron表达式、负责人和报警邮件

  2. 进入详情页面,开始设计自己的批量任务,相当于一张画板一样。第一次进批任务管理界面,会初始化两个节点,一个是开始节点,一个是结束节点

  3. 新增单独任务节点,点击设置按钮,就是任务新增

  4. 单个节点任务

  5. 多个节点任务可以用线来连接,来规定节点任务的先后顺序,单个任务也可以单独执行。

  6. 任务与任务之间的连线可以编辑

  7. 任务编辑

四、批量日志

   可以对每个批次任务进行执行日志的查询和追踪。

查看日志详情,调度备注查看

关于Webfunny

Webfunny专注于前端监控系统,前端埋点系统的研发。 致力于帮助开发者快速定位问题,帮助企业用数据驱动业务,实现业务数据的快速增长。支持H5/Web/PC前端、微信小程序、支付宝小程序、UniApp和Taro等跨平台框架。实时监控前端网页、前端数据分析、错误统计分析监控和BUG预警,第一时间报警,快速修复BUG!支持私有化部署,Docker容器化部署,可支持千万级PV的日活量!

  点赞 0   收藏 0
  • 一只会飞的鱼儿
    共发布53篇文章 获得8个收藏
全部评论: 0