数据共享程序【推送与拉取】设计方案探讨

目录

1、对外数据对接方案

2、代码实现

3、 总结


1、对外数据对接方案

        一般者对外提供数据的方式通常有如下两种方案:

         1、提供接口让接收数据方使用定时任务进行调用接口拉取数据【Pull方式】。

          2、数据提供方使用定时任务Push数据到数据使用的第三方。【Push方式】

具体情况如下图所示:             数据共享程序【推送与拉取】设计方案探讨_第1张图片

2、代码实现

    public void pushOverdueUserInfoToWaterSupply() throws Exception {
        //1、查询当前同步任务方法 上一次开始执行时间用于获得最新同步数据时间起点
        DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        SysTimedTaskSyncDataLog sysTimedTaskSyncDataLog = sysTimedTaskSyncDataLogService.
                selectTimeTaskSyncDataLogSomeOneLatestOne(BusinessConstant.SYNC_OVERDUE_TYPE);
        String lastSynDateTime = LocalDateTime.now(ZoneOffset.of("+8")).format(format);
        LocalDateTime taskStartTime =sysTimedTaskSyncDataLog==null?
                LocalDateTime.now(ZoneOffset.of("+8")):sysTimedTaskSyncDataLog.getTaskStartTime();
        System.out.println(taskStartTime.format(format));
        List overdueUserInfoList = selectSynOverdueUserInfoList(lastSynDateTime);
        //2、从本地业务数据库之中获得同步失败部分数据,同时同步成功后把中间表之中记录删除
        processPushMistakeRecordOverdueUserInfoData();
        //3、获得当前最后一次同步时间点到当前时间节点内的数据到供水一体化平台之中【数据来源saas】
        progressPushOverdueUserInfoData(overdueUserInfoList);
    }

3、 总结

     两种方式共享数据的时候在我们日常开发过程之中可能都会遇见,我本人是已经遇见了两种实现方式,Push方式在广东某项目之中实现过,目前正在实现的数据共享方式通过数据接收方Pull拉取接口。

     注意事项:任何一种方式都得考虑实际情况之中一些容错状况,比如Pull方式最好限制每次拉取数据记录比如limitPageSize=1000,最长拉取数据时间未15天等等。必须传入开始时间startDate,和结束时间endDate等等。

数据共享程序【推送与拉取】设计方案探讨_第2张图片

    /**
     * 验证共享数据参数
     * @param reqVO
     * @param reqParam
     * @return
     */
    private String validReqParamsBetweenDays(DataSharePageReqVO reqVO, DataSharePageMapperReqVO reqParam){
        String startDate=reqVO.getStartDate();
        String endDate= reqVO.getEndDate();
        LocalDateTime startLocalDate =LocalDateTimeUtil.parse(startDate,"yyyy-MM-dd HH:mm:ss");
        LocalDateTime endLocalDate = LocalDateTimeUtil.parse(endDate,"yyyy-MM-dd HH:mm:ss");;
        Duration between = LocalDateTimeUtil.between(startLocalDate, endLocalDate);
        long betweenDays = between.toDays();
        String validResult="";
        if(!endLocalDate.isAfter(startLocalDate)){
            validResult="参数[endDate] 必须在 参数[startDate] 时间之后";
        }
        else if(betweenDays>shareDataLimitDays){
            validResult="接口访问数据查询开始和结束时间不超过: "+shareDataLimitDays+ "天";
        }else {
            BeanUtil.copyProperties(reqVO,reqParam);
            reqParam.setStartDate(startDate);
            reqParam.setEndDate(endDate);
            Long beginIndex=(reqVO.getPageNo()-1)* reqVO.getPageSize();
            reqParam.setBeginIndex(beginIndex);
            validResult="";
        }
        return validResult;
    }

你可能感兴趣的:(话说业务系统功能设计,Java,常用工具方法,日常工具类,数据同步方案,java,spring,mybatis)