准实时任务调度服务设计开发说明
准实时任务调度服务:客户端提供任务,服务端提供服务,通过任务调度框架自动调度任务来实现准实时(异步)任务调度。
数据库设计说明
异步任务表(每个子系统都有此表):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 |
服务端任务开发说明
服务端任务编写示例:
package com.git.easyloan.loan.jobs;import com.git.easyloan.commons.base.BaseEasyJob;import com.git.easyloan.loan.service.batch.LoanBusinessChangeService;import javacommon.coreframe.beans.Responder;import javacommon.coreframe.holder.ApplicationContextHolder;import java.util.HashMap;import java.util.Map;public class LoanBusinessChangeJob extends BaseEasyJob {/*** 按合同号移交业务* @param map* @return*/public Responder change4contractNo(Map<String, String> map) {logBefore("移交合同【{}】",map.get("contractNo"));Map<String,String> retMap = new HashMap<String,String>();try {LoanBusinessChangeService loanBusinessChangeService = (LoanBusinessChangeService) ApplicationContextHolder.getServiceBean("LoanBusinessChangeService");loanBusinessChangeService.change4contractNo(map);logAfter();return success();}catch (Exception e){e.printStackTrace();logAfter();throw error(ERROR_CODE,ERROR_MESSAGE + e.getMessage());}}/*** 按客户号移交业务* @param map* @return*/public Responder change4partyId(Map<String,String> map) {logBefore("移交客户【{}】",map.get("partyId"));Map<String,String> retMap = new HashMap<String,String>();try {LoanBusinessChangeService loanBusinessChangeService = (LoanBusinessChangeService) ApplicationContextHolder.getServiceBean("LoanBusinessChangeService");loanBusinessChangeService.change4partyId(map);logAfter();return success();}catch (Exception e){e.printStackTrace();logAfter();throw error(ERROR_CODE,ERROR_MESSAGE + e.getMessage());}}}
客户端任务调度说明
客户端示例代码:
@GetMapping("/addContractTask")@ResponseStatus(value = HttpStatus.OK)@ApiOperation(value = "添加合同移交任务", notes = "添加合同移交任务")public void addContractTask() {PoolHelpUtil poolHelpUtil = new PoolHelpUtilImpl();try {ThreadPool pool = ThreadPool.getInstance(poolHelpUtil);PageData pd = new PageData();pd.put("taskName","移交合同"); //任务名称:根据需要插入任务名称pd.put("taskPath","com.git.easyloan.loan.jobs"); // 任务路径:服务方提供的任务执行包路径pd.put("taskClasse","LoanBusinessChangeJob"); //任务执行器:服务方提供的执行任务的java类pd.put("taskFunc","change4contractNo"); //任务逻辑:服务方提供的任务执行器调用的逻辑方法pd.put("taskNo","change4contractNo"); //任务编号:默认存放任务逻辑名称即可Map<String,String> params = new HashMap<String,String>();params.put("contractNo","22622019205578");params.put("b_userNum","220476");params.put("b_orgNum","061226");params.put("b_bankCode","22699");params.put("a_userNum","220476");params.put("a_orgNum","061226");params.put("a_bankCode","22699");pd.put("taskParams", params); //任务参数:服务方提供的任务执行逻辑需要的参数,必须使用Map<String,String>格式存放loanFeignClient.addTask(pd);} catch (Exception e) {e.printStackTrace();}}
