JAVA如何控制重复提交?一个设备需要提交数据到我的接口,但是这个设备会提交两次相同的数据在几秒内

一个设备需要提交数据到我的接口,但是这个设备会提交两次相同的数据在几秒内,我希望在一分钟内只存入一条相同的数据,请问如何实现?

我现在是比较新增数据和上一条数据的时间间隔

@ApiOperation("增加进出纳厂数据")
    @RequestMapping(value="/v1/refuse-treatment-plant", method={ RequestMethod.POST })
    public ResponseResult insertRefuseTreatmentPlantV1(
            HttpServletRequest request,
            @RequestBody RefuseTreatmentPlant refuseTreatmentPlant
    ) {
        String code = "500";
        String message = "FAIL";
        String detail = "selectBulldozerInfo";
        ResponseResult responseResult = new ResponseResult();

        List<RefuseTreatmentPlant> listRefuse = refuseTreatmentPlantService.selectRefuseTreatmentPlant(0, 1, "DESC");
        RefuseTreatmentPlant oldRefuseTreatmentPlant = listRefuse.get(0);

        String oldLicenseNumber = oldRefuseTreatmentPlant.getLicenseNumber();

        System.out.println("oldLicenseNumber == " + oldLicenseNumber);
        System.out.println(refuseTreatmentPlant);
        if(oldLicenseNumber.equals(refuseTreatmentPlant.getLicenseNumber())) {
            System.out.println("提交数据信息相同");
        }

//        int insertCount = refuseTreatmentPlantService.insertRefuseTreatmentPlant(refuseTreatmentPlant);
//        if(insertCount > 0) {
//            code = "200";
//            message = "SUCCESS";
//            detail = "bulldozer-standing-book";
//            responseResult.setData(refuseTreatmentPlant);
//        }

        responseResult.setCode(code);
        responseResult.setMessage(message);
        responseResult.setDetail(detail);
        return responseResult;
    }
阅读 1.8k
1 个回答

一般是用缓存来解决这种重复提交类的问题:

  1. 用当前提交的上下文生成 key,比如你这里 ${userId}_selectBulldozerInfo
  2. 提交成功后,在缓存中加入这个 key,并设置一个过期时间,比如你这里的 1 分种
  3. 收到提交的时候,先生成 key,判断这个 key 是否在缓存中存在,如果存在则为重复提交

如果是单机系统,可以直接使用本地缓存,如 Caffeine;如果是分布式系统,使用 Redis

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题