import com.isyscore.rpc.file.config.DownloadTaskConfig;
import com.isyscore.rpc.file.config.UploadTaskConfig;
import com.isyscore.rpc.file.util.FileUtil;
import com.isyscore.rpc.file.util.TimeUtils;
import java.io.File;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import static com.isyscore.rpc.file.FileDownloadHandler.FILE_DOWNLOAD_TASK_PATH;
import static com.isyscore.rpc.file.FileUploadHandler.FILE_UPLOAD_TASK_PATH;
/**
* @author shizi
* @since 2021-08-25 18:19:49
*/
public class DeamonTask {
/**
* 守护线程,用于清理
*/
private final ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(1, r -> {
Thread thread = new Thread(r, "Thread-TaskCacheConfig-Deamon");
thread.setDaemon(true);
return thread;
});
private volatile boolean started = false;
private static final DeamonTask task = new DeamonTask();
public static DeamonTask getInstance() {
return task;
}
private DeamonTask(){}
public void start() {
if (started) {
return;
}
synchronized (DeamonTask.class) {
if (!started) {
initDeamon();
started = true;
}
}
}
private void cleanUploadTask() {
if (!FileUtil.exist(FILE_UPLOAD_TASK_PATH)) {
return;
}
File taskConfigFile = FileUtil.getDirectFile(FILE_UPLOAD_TASK_PATH);
File[] files = taskConfigFile.listFiles();
if (null == files) {
return;
}
for (File file : files) {
UploadTaskConfig taskConfig = FileUtil.readObject(UploadTaskConfig.class, file);
if (null == taskConfig) {
continue;
}
Long lastTime = taskConfig.getLastUpdateTime();
if (null == lastTime) {
continue;
}
// 如果超过5个小时,则任务的进度文件删除掉
if (TimeUtils.plusHours(lastTime, 5) < System.currentTimeMillis()) {
FileUtil.delete(file);
}
}
}
private void cleanDownTask() {
if (!FileUtil.exist(FILE_DOWNLOAD_TASK_PATH)) {
return;
}
File taskConfigFile = FileUtil.getDirectFile(FILE_DOWNLOAD_TASK_PATH);
File[] files = taskConfigFile.listFiles();
if (null == files) {
return;
}
for (File file : files) {
DownloadTaskConfig taskConfig = FileUtil.readObject(DownloadTaskConfig.class, file);
if (null == taskConfig) {
continue;
}
Long lastTime = taskConfig.getLastUpdateTime();
if (null == lastTime) {
continue;
}
// 如果超过5个小时,则任务的进度文件删除掉
if (TimeUtils.plusHours(lastTime, 5) < System.currentTimeMillis()) {
FileUtil.delete(file);
}
}
}
private void initDeamon() {
scheduler.scheduleWithFixedDelay(() -> {
cleanUploadTask();
cleanDownTask();
}, 1, 30, TimeUnit.MINUTES);
}
}