1. 개요
TempFileCleanJob 클래스는 시스템에서 주기적으로 임시 파일을 삭제하는 스케줄 작업을 수행하는 Java 클래스입니다. 이 작업을 통해 불필요한 임시 파일을 삭제함으로써 디스크 공간을 확보하고 시스템 성능을 유지할 수 있습니다. Spring Framework와 Quartz Scheduler를 사용하여 주기적인 파일 정리 작업을 자동화합니다.
2. 내용
TempFileCleanJob 클래스는 다음과 같은 주요 구성 요소로 이루어져 있습니다:
- Quartz Scheduler와의 통합: @DisallowConcurrentExecution 어노테이션을 사용하여 동시에 여러 작업이 실행되지 않도록 보장합니다.
- Spring Framework 의존성 주입: @Autowired 어노테이션을 사용하여 필요한 서비스(ErrorUtil, FileService, EnvDRSoftLoader)를 주입받아 사용합니다.
- 파일 삭제 로직:
- 지정된 날짜 이전의 임시 파일을 검색하고, 해당 파일을 물리적으로 삭제합니다.
- 삭제된 파일의 메타 데이터를 데이터베이스에서 제거합니다.
- FileUtils와 FileDeleteStrategy를 사용하여 파일을 강제로 삭제하며, 삭제 작업 중 발생할 수 있는 예외를 로깅합니다.
3. 코드
package kr.co.drsoft.job;
import kr.co.drsoft.consts.EnvDRSoftLoader;
import kr.co.drsoft.module.common.FileService;
import kr.co.drsoft.util.ErrorUtil;
import kr.co.drsoft.util.Lists;
import kr.co.drsoft.vo.cmm.PageVo;
import kr.co.drsoft.vo.req.ReqTmpFileLstVo;
import kr.co.drsoft.vo.res.ResTmpFileVo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileDeleteStrategy;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.util.Date;
import java.util.Locale;
@Slf4j
@Component
@DisallowConcurrentExecution
public class TempFileCleanJob extends JobInterface {
@Autowired
private ErrorUtil errorUtil;
@Autowired
private FileService fileService;
@Autowired
private EnvDRSoftLoader envDRSoftLoader;
@Override
@Transactional
public void start(JobExecutionContext context) throws Exception {
Date endDtObj = DateUtils.parseDate(
DateFormatUtils.format(new Date(), "yyyy-MM-dd"),
Locale.KOREAN,
"yyyy-MM-dd"
);
ReqTmpFileLstVo reqTmpFileLstVo = ReqTmpFileLstVo.builder()
.startDt(
DateUtils.parseDate(
DateFormatUtils.format(DateUtils.addDays(new Date(), -1), "yyyy-MM-dd"),
Locale.KOREAN,
"yyyy-MM-dd"
)
)
.endDt(endDtObj)
.build();
PageVo pageVo = reqTmpFileLstVo.getPage();
pageVo.setLimitPageSize(1000);
pageVo.init();
Lists<ResTmpFileVo> resTempfileLst = fileService.getTmpFileLst(reqTmpFileLstVo);
if (resTempfileLst == null) {
return;
}
for (ResTmpFileVo resTmpFileVo : resTempfileLst) {
// 파일 삭제
File targetPhysicalFile = null;
try {
targetPhysicalFile = new File(envDRSoftLoader.getTempFilePath() + File.separator + resTmpFileVo.getFilePath());
if (targetPhysicalFile != null && targetPhysicalFile.isFile()) {
FileUtils.forceDelete(targetPhysicalFile);
SELECT A.* FROM TB_TMP_FILE A
WHERE 1 = 1
AND reg_dt <![CDATA[<]]> #{endDt}
이 코드는 특정 날짜 이전에 등록된 모든 임시 파일의 메타 데이터를 삭제하기 위한 SQL 쿼리를 보여줍니다.
'Programming > 스프링.유틸' 카테고리의 다른 글
AWS AMI 환경에서 Selenium 크롬 드라이버 이슈 해결 방법 (1) | 2024.09.22 |
---|---|
[Java][SSH] Jsch Java SSH 라이브러리 사용 주의 사항 (2) | 2022.11.28 |
[자바][JAVA][파일업로드]자바 파일업로드 기초 소스 (초급자용) (0) | 2022.03.20 |
Image Test 및 부정 클릭 방지 테스트. (0) | 2021.11.18 |
[Spring F/W 유틸] Dynamic Get Bean Object (0) | 2021.09.07 |