오래된파일삭제 job
This commit is contained in:
@@ -0,0 +1,99 @@
|
|||||||
|
package com.eactive.eai.common.scheduler;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
import org.quartz.Job;
|
||||||
|
import org.quartz.JobExecutionContext;
|
||||||
|
import org.quartz.JobExecutionException;
|
||||||
|
|
||||||
|
import com.eactive.eai.common.util.Logger;
|
||||||
|
|
||||||
|
public class OldFileDeleteJob implements Job {
|
||||||
|
static Logger logger = Logger.getLogger(Logger.LOGGER_SCHEDULER);
|
||||||
|
|
||||||
|
public void execute(JobExecutionContext context) throws JobExecutionException {
|
||||||
|
|
||||||
|
String dirValue = context.getJobDetail().getJobDataMap().getString("DIR");
|
||||||
|
String msg = context.getJobDetail().getJobDataMap().getString("MSG");
|
||||||
|
|
||||||
|
if (dirValue == null || dirValue .trim().isEmpty()) {
|
||||||
|
logger.error("DIR 값이 없습니다. 작업 중단.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (msg == null || msg.trim().isEmpty()) {
|
||||||
|
logger.error("MSG 값이 없습니다. 작업 중단.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int durationDays;
|
||||||
|
try {
|
||||||
|
durationDays = Integer.parseInt(msg.trim());
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
logger.error("MSG 값이 숫자가 아닙니다. 작업 중단. MSG=" + msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (durationDays <= 0) {
|
||||||
|
logger.error("보관일수는 1 이상이어야 합니다. 작업 중단. MSG=" + msg);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] dirs = dirValue .split(",");
|
||||||
|
for (String dir : dirs) {
|
||||||
|
|
||||||
|
String trimmedDir = dir.trim();
|
||||||
|
if (trimmedDir.isEmpty()) continue;
|
||||||
|
|
||||||
|
try {
|
||||||
|
logger.info("파일 정리 시작: " + trimmedDir + " (보관일수: " + durationDays + ")");
|
||||||
|
deleteOldFilesRecursively(durationDays, trimmedDir);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("파일 정리 실패: " + trimmedDir, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public static void deleteOldFilesRecursively(int durationDays, String dir) {
|
||||||
|
|
||||||
|
File baseDir = new File(dir);
|
||||||
|
|
||||||
|
if (!baseDir.exists() || !baseDir.isDirectory()) {
|
||||||
|
throw new IllegalArgumentException("Invalid directory: " + dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
long expireMillis = durationDays * 24L * 60 * 60 * 1000;
|
||||||
|
deleteFilesOnly(baseDir, expireMillis);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static void deleteFilesOnly(File dir, long expireMillis) {
|
||||||
|
|
||||||
|
File[] list = dir.listFiles();
|
||||||
|
if (list == null) {
|
||||||
|
logger.warn("디렉터리 접근 실패: " + dir.getAbsolutePath());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
long now = System.currentTimeMillis();
|
||||||
|
|
||||||
|
for (File file : list) {
|
||||||
|
|
||||||
|
if (file.isDirectory()) {
|
||||||
|
deleteFilesOnly(file, expireMillis);
|
||||||
|
}
|
||||||
|
else if (file.isFile()) {
|
||||||
|
|
||||||
|
long age = now - file.lastModified();
|
||||||
|
|
||||||
|
if (age > expireMillis) {
|
||||||
|
|
||||||
|
boolean deleted = file.delete();
|
||||||
|
|
||||||
|
if (!deleted) {
|
||||||
|
logger.warn("파일 삭제 실패: " + file.getAbsolutePath());
|
||||||
|
} else {
|
||||||
|
logger.info("파일 삭제 완료: " + file.getAbsolutePath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user