组件开发
组件配置
组件重试机制
-
异常情况重试
try { // 业务逻辑 }catch (Exception e) { logger.error("调用异常:",e); // 返回一定要改为终止 end response.failAndEnd(TranConstant.RESP_CODE_39999,"任务处理中"); // 需要将组件执行状态改为未完成 response.notFinish(); return; }
-
需要有回调的场景
在交易配置里将 是否回调 配置成是( *** 注意:配置成回调后不管当前流程的自动节点是否成功都会继续执行下一自动节点)
-
回调重试
回调不影响主交易的场景下可通过配置 是否等待完成 来实现,配置成 否 时,会将结果回调流程,不管组件是否处于未完成状态
批量开发
批量多线程分组
-
任务前置处理
/** * 任务前置处理,为了支持重跑删除已跑批的数据 */ public void preGroupDeal(JobReqEntity jobReqEntity, JobRespEntity jobRespEntity){ }
-
任务分组
=============================JAVA================================= /** * job分组处理 * @return */ @Override public int grouping(JobReqEntity jobReqEntity) { Map<String, Object> jobParameter = jobReqEntity.getJobParameter(); String tranDate = (String) jobParameter.get("tranDate"); // 时间按照各自批量 String dataDate = LocalDate.parse(tranDate).plusDays(-1).format(DateTimeFormatter.ofPattern(DatePattern.DATE_YYYY_MM_DD)); int totalNum = wsdLoanDetailTmpExtMapper.countByDataDate(dataDate); // 每组个数 int unitNum = 10000; // 分组个数 int groupNum = (int) Math.ceil((double) totalNum / (double) unitNum); LOGGER.info("任务分组groupNum=[{}]", groupNum); jobParameter.put("_unitNum", unitNum); jobParameter.put("_groupNum", groupNum); return groupNum; } =============================XML================================= SELECT count(*) FROM rec_loan_detail_tmp WHERE data_date = #{dataDate,jdbcType=VARCHAR}
-
任务执行
=============================JAVA================================= // 分页查询数据 // 查询放款(合约)明细文件临时表数据 PageRowBounds pageRowBounds = PageUtil.getPageRowBounds(parameter); WsdLoanDetailTmp wsdLoanDetailTmp = new WsdLoanDetailTmp(); wsdLoanDetailTmp.setDataDate(dataDate); // ********************注意: 要加上 order by 排序,否则可能会出现乱序问题******************** List<WsdLoanDetailTmp> list = wsdLoanDetailTmpExtMapper.selectListBySelective(wsdLoanDetailTmp, pageRowBounds); for (WsdLoanDetailTmp tmp : list) { // 业务逻辑处理 } // 插入历史表 BaseGroupDTO baseGroupDTO = PageUtil.getBaseGroupDTO(parameter); baseGroupDTO.setDataDate(dataDate); wsdLoanDetailHisExtMapper.insertBySelective(baseGroupDTO); =============================XML================================= // ********************注意: 要加上 order by 排序,否则可能会出现乱序问题******************** // 插入历史表 INSERT INTO rec_loan_detail_his SELECT * FROM rec_loan_detail_tmp WHERE data_date = #{dataDate} order by id limit #{offset},#{rows}