ThreadService.java 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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.manage.service.ISceneColdStorageLogService;
  7. import com.fdkankan.manage.service.ISceneColdStorageService;
  8. import com.fdkankan.redis.util.RedisUtil;
  9. import lombok.extern.slf4j.Slf4j;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Service;
  12. import java.util.concurrent.ScheduledThreadPoolExecutor;
  13. import java.util.concurrent.TimeUnit;
  14. import java.util.concurrent.atomic.AtomicReference;
  15. @Service
  16. @Slf4j
  17. public class ThreadService {
  18. @Autowired
  19. FYunFileServiceInterface fYunFileServiceInterface;
  20. @Autowired
  21. RedisUtil redisUtil;
  22. @Autowired
  23. ISceneColdStorageService sceneColdStorageService;
  24. @Autowired
  25. ISceneColdStorageLogService sceneColdStorageLogService;
  26. public void checkRestore(String num,String cloudBucket,String bucket,String folderName){
  27. String redisKey = String.format(RedisKeyUtil.restStoreKey, num);
  28. if(redisUtil.hasKey(redisKey)){
  29. return;
  30. }
  31. redisUtil.set(redisKey,folderName);
  32. AtomicReference<Integer> state = new AtomicReference<>(1);
  33. AtomicReference<String> reason = new AtomicReference<>("");
  34. ScheduledThreadPoolExecutor scheduledThreadPoolExecutor = new ScheduledThreadPoolExecutor(1);
  35. //等待任务执行结束,在间隔2秒执行。
  36. scheduledThreadPoolExecutor.scheduleWithFixedDelay(()->{
  37. try {
  38. Integer process = fYunFileServiceInterface.getRestoreFolderProcess(cloudBucket, folderName);
  39. System.out.println(process);
  40. log.info("ThreadService-cloudBucket:{},bucket:{},folderName:{},process:{}",cloudBucket,bucket,folderName,process);
  41. if(process == 100){
  42. fYunFileServiceInterface.copyFileBetweenBucket(cloudBucket,folderName,bucket,folderName);
  43. log.info("ThreadService-copy-bucket");
  44. sceneColdStorageService.updateStatus(num,2);
  45. scheduledThreadPoolExecutor.shutdown();
  46. }
  47. }catch (Exception e){
  48. log.info("ThreadService-error:",e);
  49. state.set(-1);
  50. reason.set(e.getMessage());
  51. scheduledThreadPoolExecutor.shutdown();
  52. throw new BusinessException(ResultCode.SCENE_NOT_STORE);
  53. }finally {
  54. redisUtil.del(redisKey);
  55. sceneColdStorageLogService.saveLog(num,folderName);
  56. }
  57. //任务启动多久之后 ,周期 每10s执行一次,时间单位
  58. },1000,60*1000, TimeUnit.MILLISECONDS);
  59. }
  60. }