多线程同步操作

 public ResponseEntity<ApiResult> distributeMedia(@RequestBody CopyMediaCloudDto copyMediaCloudDto)  {
        List<LocalDate> datesBetween = DateUtil.getDatesBetween(copyMediaCloudDto.getStartTime(), copyMediaCloudDto.getEndTime());
        if(datesBetween.size() >30){
            throw new CustomCodeException(ApiCode.DATA_TOO_LONG);
        }
        log.info("start push huzhou bucket ");
        StopWatch stopWatch = new StopWatch();
        stopWatch.start();
        CompletableFuture[] completableFutures = new CompletableFuture[datesBetween.size()];

        for (int i = 0; i < datesBetween.size(); i++) {
            log.info("查询日期{}",datesBetween.get(i));
            int finalI = i;
            completableFutures[i] = CompletableFuture.runAsync(() -> {
                List<HzPushOssDto> dto = new ArrayList<>();
                //图片
                    dealImg(copyMediaCloudDto.getTenantId(), datesBetween.get(finalI), dto);

                    //音频
                    dealAudio(copyMediaCloudDto.getTenantId(),datesBetween.get(finalI), dto);

                    //视频
                    dealVideo(copyMediaCloudDto.getTenantId(),datesBetween.get(finalI), dto);

                    //文件
                    dealFile(copyMediaCloudDto.getTenantId(),datesBetween.get(finalI), dto);
                    //copy文件
                    dto.forEach(m -> {
                        log.info(" push huzhou ");
                        try {
                            OSS cacheOss = AliyunUtil.getClient(String.format("https://%s.aliyuncs.com", copyMediaCloudDto.getBucketLocation()), copyMediaCloudDto.getAk(),copyMediaCloudDto.getSk());
                            boolean b = cacheOss.doesObjectExist(copyMediaCloudDto.getBucketName(), m.getId() + "_" + replaceSpecialCharacters(m.getTitle()));
//                    //不存在则copy
                            logger.info("返回结果{}",b);
                            if(!b){
                                logger.info("copy {}:{} to {}:{}", m.getBucketName(), m.getQiniuKey(), copyMediaCloudDto.getBucketName(), m.getId() + "_" + replaceSpecialCharacters(m.getTitle()));
                                cacheOss.copyObject(m.getBucketName(), m.getQiniuKey(), copyMediaCloudDto.getBucketName(), m.getId() + "_" + replaceSpecialCharacters(m.getTitle()));
                            }
                        } catch (OSSException e) {
                            log.info(" push huzhou media OSSException {}",e.getMessage());
                        } catch (ClientException e) {
                            log.info(" push huzhou media ClientException {}",e.getMessage());
                        }

                    });

            }, publishExecutor);

        }
        CompletableFuture.allOf(completableFutures).join();
        stopWatch.stop();
        log.info("执行时长:{}秒", stopWatch.getTotalTimeSeconds());
        return renderOk();
    }```

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值