ThreadService.java 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package com.fdkankan.manage.thread;
  2. import com.fdkankan.fyun.face.FYunFileServiceInterface;
  3. import com.fdkankan.manage.common.RedisKeyUtil;
  4. import com.fdkankan.manage.common.ResultCode;
  5. import com.fdkankan.manage.exception.BusinessException;
  6. import com.fdkankan.redis.util.RedisUtil;
  7. import lombok.extern.slf4j.Slf4j;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.scheduling.annotation.Async;
  10. import org.springframework.stereotype.Service;
  11. import java.util.ArrayList;
  12. import java.util.List;
  13. import java.util.concurrent.ScheduledThreadPoolExecutor;
  14. import java.util.concurrent.TimeUnit;
  15. @Service
  16. @Slf4j
  17. public class ThreadService {
  18. @Autowired
  19. FYunFileServiceInterface fYunFileServiceInterface;
  20. @Autowired
  21. RedisUtil redisUtil;
  22. public void checkRestore(String num,String cloudBucket,String bucket,String folderName){
  23. String redisKey = String.format(RedisKeyUtil.restStoreKey, num);
  24. if(redisUtil.hasKey(redisKey)){
  25. return;
  26. }
  27. redisUtil.set(redisKey,folderName);
  28. ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1);
  29. //等待任务执行结束,在间隔2秒执行。
  30. scheduledThreadPoolExecutor.scheduleWithFixedDelay(()->{
  31. try {
  32. Integer process = fYunFileServiceInterface.getRestoreFolderProcess(cloudBucket, folderName);
  33. System.out.println(process);
  34. log.info("ThreadService-cloudBucket:{},bucket:{},folderName:{},process:{}",cloudBucket,bucket,folderName,process);
  35. if(process == 100){
  36. fYunFileServiceInterface.copyFileBetweenBucket(cloudBucket,folderName,bucket,folderName);
  37. log.info("ThreadService-copy-bucket");
  38. scheduledThreadPoolExecutor.shutdown();
  39. }
  40. }catch (Exception e){
  41. log.info("ThreadService-error:",e);
  42. scheduledThreadPoolExecutor.shutdown();
  43. throw new BusinessException(ResultCode.SCENE_NOT_STORE);
  44. }finally {
  45. redisUtil.del(redisKey);
  46. }
  47. //任务启动多久之后 ,周期 每10s执行一次,时间单位
  48. },1000,60*1000, TimeUnit.MILLISECONDS);
  49. }
  50. }