准实时任务调度服务设计开发说明

准实时任务调度服务:客户端提供任务,服务端提供服务,通过任务调度框架自动调度任务来实现准实时(异步)任务调度。

数据库设计说明

异步任务表(每个子系统都有此表):tb_bat_job_statue

字段名称 字段类型 中文说明
UUID VARCHAR2(32) 任务主键
TASK_ID VARCHAR2(50) 任务ID
TASTK_DATE VARCHAR2(20) 任务日期
TASK_NO VARCHAR2(50) 任务编号
TASK_TYPE VARCHAR2(8) 任务类型
TASK_NAME VARCHAR2(300) 任务名称
BANK_CODE VARCHAR2(20) 法人代码
ORG_COD VARCHAR2(20) 经办机构
TAL_COD VARCHAR2(20) 核算机构
TASK_PATH VARCHAR2(500) 任务路径
TASK_CLASS VARCHAR2(300) 任务程序
TASK_FUNC VARCHAR2(300) 任务方法
TASK_PARAMS VARCHAR2(500) 任务参数
DEP_REL VARCHAR2(300) 依赖关系(支持多个依赖关系,中间用‘\ ’分割)
STS VARCHAR2(30) 任务状态
RUN_TIMES NUMBER 运行时间(ms)
REMARK CLOB 备注信息
DELFLAG VARCHAR2(1) 删除标志
CREATE_TIME VARCHAR2(32) 创建时间
UPDATE_TIME VARCHAR2(32) 更新时间
TRUNC_NO NUMBER 乐观锁

核心调度组件Easy ETL介绍

Easy ETL:任务调度框架,内置线程池模块,任务调度模块和远程控制模块。

服务端任务添加接口

添加准实时任务接口

基本信息

接口名称:添加准实时任务

接口路径(POST):/ejob/addTask

请求参数

名称 类型 是否必须 默认值 备注 其他信息
taskName string 必须 任务名称:根据需要插入任务名称
taskPath string 必须 任务路径:服务方提供的任务执行包路径
taskClasse string 必须 任务执行器:服务方提供的执行任务的java类
taskFunc string 必须 任务逻辑:服务方提供的任务执行器调用的逻辑方法
taskNo string 必须 任务编号:默认存放任务逻辑名称即可
taskParams object 必须 任务参数:服务方提供的任务执行逻辑需要的参数,必须使用Map格式存放 备注: 任务参数:服务方提供的任务执行逻辑需要的参数,必须使用Map格式存放

批量添加准实时任务接口

基本信息

接口名称:批量添加准实时任务

接口路径(POST):/ejob/batchAddTask

请求参数

名称 类型 是否必须 默认值 备注 其他信息
object [] 必须 item 类型: object
taskName string 必须 任务名称:根据需要插入任务名称
taskPath string 必须 任务路径:服务方提供的任务执行包路径
taskClasse string 必须 任务执行器:服务方提供的执行任务的java类
taskFunc string 必须 任务逻辑:服务方提供的任务执行器调用的逻辑方法
taskNo string 必须 任务编号:默认存放任务逻辑名称即可
taskParams object 必须 任务参数:服务方提供的任务执行逻辑需要的参数,必须使用Map格式存放 备注: 任务参数:服务方提供的任务执行逻辑需要的参数,必须使用Map格式存放

服务端任务开发说明

服务端任务编写示例:

  1. package com.git.easyloan.loan.jobs;
  2. import com.git.easyloan.commons.base.BaseEasyJob;
  3. import com.git.easyloan.loan.service.batch.LoanBusinessChangeService;
  4. import javacommon.coreframe.beans.Responder;
  5. import javacommon.coreframe.holder.ApplicationContextHolder;
  6. import java.util.HashMap;
  7. import java.util.Map;
  8. public class LoanBusinessChangeJob extends BaseEasyJob {
  9. /**
  10. * 按合同号移交业务
  11. * @param map
  12. * @return
  13. */
  14. public Responder change4contractNo(Map<String, String> map) {
  15. logBefore("移交合同【{}】",map.get("contractNo"));
  16. Map<String,String> retMap = new HashMap<String,String>();
  17. try {
  18. LoanBusinessChangeService loanBusinessChangeService = (LoanBusinessChangeService) ApplicationContextHolder.getServiceBean("LoanBusinessChangeService");
  19. loanBusinessChangeService.change4contractNo(map);
  20. logAfter();
  21. return success();
  22. }catch (Exception e){
  23. e.printStackTrace();
  24. logAfter();
  25. throw error(ERROR_CODE,ERROR_MESSAGE + e.getMessage());
  26. }
  27. }
  28. /**
  29. * 按客户号移交业务
  30. * @param map
  31. * @return
  32. */
  33. public Responder change4partyId(Map<String,String> map) {
  34. logBefore("移交客户【{}】",map.get("partyId"));
  35. Map<String,String> retMap = new HashMap<String,String>();
  36. try {
  37. LoanBusinessChangeService loanBusinessChangeService = (LoanBusinessChangeService) ApplicationContextHolder.getServiceBean("LoanBusinessChangeService");
  38. loanBusinessChangeService.change4partyId(map);
  39. logAfter();
  40. return success();
  41. }catch (Exception e){
  42. e.printStackTrace();
  43. logAfter();
  44. throw error(ERROR_CODE,ERROR_MESSAGE + e.getMessage());
  45. }
  46. }
  47. }

客户端任务调度说明

客户端示例代码:

  1. @GetMapping("/addContractTask")
  2. @ResponseStatus(value = HttpStatus.OK)
  3. @ApiOperation(value = "添加合同移交任务", notes = "添加合同移交任务")
  4. public void addContractTask() {
  5. PoolHelpUtil poolHelpUtil = new PoolHelpUtilImpl();
  6. try {
  7. ThreadPool pool = ThreadPool.getInstance(poolHelpUtil);
  8. PageData pd = new PageData();
  9. pd.put("taskName","移交合同"); //任务名称:根据需要插入任务名称
  10. pd.put("taskPath","com.git.easyloan.loan.jobs"); // 任务路径:服务方提供的任务执行包路径
  11. pd.put("taskClasse","LoanBusinessChangeJob"); //任务执行器:服务方提供的执行任务的java类
  12. pd.put("taskFunc","change4contractNo"); //任务逻辑:服务方提供的任务执行器调用的逻辑方法
  13. pd.put("taskNo","change4contractNo"); //任务编号:默认存放任务逻辑名称即可
  14. Map<String,String> params = new HashMap<String,String>();
  15. params.put("contractNo","22622019205578");
  16. params.put("b_userNum","220476");
  17. params.put("b_orgNum","061226");
  18. params.put("b_bankCode","22699");
  19. params.put("a_userNum","220476");
  20. params.put("a_orgNum","061226");
  21. params.put("a_bankCode","22699");
  22. pd.put("taskParams", params); //任务参数:服务方提供的任务执行逻辑需要的参数,必须使用Map<String,String>格式存放
  23. loanFeignClient.addTask(pd);
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. }