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();
}```
多线程同步操作
最新推荐文章于 2024-08-12 21:25:19 发布