1. import com.isyscore.rpc.file.config.DownloadTaskConfig;
    2. import com.isyscore.rpc.file.config.UploadTaskConfig;
    3. import com.isyscore.rpc.file.util.FileUtil;
    4. import com.isyscore.rpc.file.util.TimeUtils;
    5. import java.io.File;
    6. import java.util.concurrent.ScheduledThreadPoolExecutor;
    7. import java.util.concurrent.TimeUnit;
    8. import static com.isyscore.rpc.file.FileDownloadHandler.FILE_DOWNLOAD_TASK_PATH;
    9. import static com.isyscore.rpc.file.FileUploadHandler.FILE_UPLOAD_TASK_PATH;
    10. /**
    11. * @author shizi
    12. * @since 2021-08-25 18:19:49
    13. */
    14. public class DeamonTask {
    15. /**
    16. * 守护线程,用于清理
    17. */
    18. private final ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(1, r -> {
    19. Thread thread = new Thread(r, "Thread-TaskCacheConfig-Deamon");
    20. thread.setDaemon(true);
    21. return thread;
    22. });
    23. private volatile boolean started = false;
    24. private static final DeamonTask task = new DeamonTask();
    25. public static DeamonTask getInstance() {
    26. return task;
    27. }
    28. private DeamonTask(){}
    29. public void start() {
    30. if (started) {
    31. return;
    32. }
    33. synchronized (DeamonTask.class) {
    34. if (!started) {
    35. initDeamon();
    36. started = true;
    37. }
    38. }
    39. }
    40. private void cleanUploadTask() {
    41. if (!FileUtil.exist(FILE_UPLOAD_TASK_PATH)) {
    42. return;
    43. }
    44. File taskConfigFile = FileUtil.getDirectFile(FILE_UPLOAD_TASK_PATH);
    45. File[] files = taskConfigFile.listFiles();
    46. if (null == files) {
    47. return;
    48. }
    49. for (File file : files) {
    50. UploadTaskConfig taskConfig = FileUtil.readObject(UploadTaskConfig.class, file);
    51. if (null == taskConfig) {
    52. continue;
    53. }
    54. Long lastTime = taskConfig.getLastUpdateTime();
    55. if (null == lastTime) {
    56. continue;
    57. }
    58. // 如果超过5个小时,则任务的进度文件删除掉
    59. if (TimeUtils.plusHours(lastTime, 5) < System.currentTimeMillis()) {
    60. FileUtil.delete(file);
    61. }
    62. }
    63. }
    64. private void cleanDownTask() {
    65. if (!FileUtil.exist(FILE_DOWNLOAD_TASK_PATH)) {
    66. return;
    67. }
    68. File taskConfigFile = FileUtil.getDirectFile(FILE_DOWNLOAD_TASK_PATH);
    69. File[] files = taskConfigFile.listFiles();
    70. if (null == files) {
    71. return;
    72. }
    73. for (File file : files) {
    74. DownloadTaskConfig taskConfig = FileUtil.readObject(DownloadTaskConfig.class, file);
    75. if (null == taskConfig) {
    76. continue;
    77. }
    78. Long lastTime = taskConfig.getLastUpdateTime();
    79. if (null == lastTime) {
    80. continue;
    81. }
    82. // 如果超过5个小时,则任务的进度文件删除掉
    83. if (TimeUtils.plusHours(lastTime, 5) < System.currentTimeMillis()) {
    84. FileUtil.delete(file);
    85. }
    86. }
    87. }
    88. private void initDeamon() {
    89. scheduler.scheduleWithFixedDelay(() -> {
    90. cleanUploadTask();
    91. cleanDownTask();
    92. }, 1, 30, TimeUnit.MINUTES);
    93. }
    94. }