背景:
最近在研究怎么批量执行定时任务,于是在网上找到了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和样式文件。
三、新建批量任务
-
新建批次,包括任务描述、cron表达式、负责人和报警邮件
-
进入详情页面,开始设计自己的批量任务,相当于一张画板一样。第一次进批任务管理界面,会初始化两个节点,一个是开始节点,一个是结束节点
-
新增单独任务节点,点击设置按钮,就是任务新增
-
单个节点任务
-
多个节点任务可以用线来连接,来规定节点任务的先后顺序,单个任务也可以单独执行。
-
任务与任务之间的连线可以编辑
-
任务编辑
四、批量日志
可以对每个批次任务进行执行日志的查询和追踪。
查看日志详情,调度备注查看