# batch-job **Repository Path**: huxipi_admin/batch-job ## Basic Information - **Project Name**: batch-job - **Description**: 基于xxl-job改造,支持oracle数据库,增加任务依赖 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 1 - **Created**: 2020-09-27 - **Last Updated**: 2022-10-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## Introduction(此版为oracle版本,增加了任务的调度依赖) XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 此版本为2.1.0 。 ## Documentation (原始作者-mysql版详见) - [github](https://github.com/xuxueli/xxl-job) - [中文文档](https://www.xuxueli.com/xxl-job/) ## Features - ## 基于Spring boot、XXL-JOB、Oracle版本的基础上,增加**`任务依赖`**的功能。 ## 一直看到有反馈XXL-JOB没有前置任务依赖功能,当然如果是串行任务可以通过设置子任务来达到同样的效果如流程A ->B->C,分散的也可以通过多个子任务完成,譬如A->B,C.其它复杂的类似工作流似的任务流程还在许老师的 todo list中(DAG流程任务),期望能尽快推出。 我遇到的是一个除串行,分散之外的第三种场景,聚合。如 A,B,C ->D,也即A,B,C任务都执行完成了再执行D.那么该如何实现这个功能呢?一个大胆的想法诞生了(编码中,需要可以联系我微信huxip)。 ## 思路:分散叫子任务,那么聚合就叫父任务。也即给jobinfo增加父任务的依赖,当然前后台都需要添加给jobinfo增加属性parent_job_id.如上述案例,需要聚合时候,则在D任务存储parentjob_id为 A_ID,B_ID,C_ID#. 说明:#前面为任务父聚合依赖任务ID,#后为已调度执行任务ID - 1.当A执行完成后,在回调方法中找出包含A为父任务的聚合依赖任务,譬如D,再更新其父任务为A_ID,B_ID,C_ID#A_ID,即#分割,前面为依赖,后面为执行过的,当#后任务能覆盖父任务时,则可以触发调度执行D任务。 - 2.当D被调启任务时,判断其parent_job_id是否满足,也即#后面的任务均已完成调度,如为A_ID,B_ID,C_ID#A_ID,C_ID,B_ID,否则不进行调度,等待其它任务完成后再调度。 - 3.当D任务执行完成后回调方法再更新其父任务为A_ID,B_ID,C_ID#,等待下一次再循环调度。 - 通过上述两步,基本可以完成任务的聚合依赖, 说明:聚合依赖前置任务是无序的,如为有序则相当于串行任务了。 ## 使用有疑问,可联系我讨论,微信号:huxipi