일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- spring 쇼핑몰
- 스프링 업로드
- 스프링 게시판
- 스프링 프로젝트 기본 설정
- 스프링 이미지
- 정규표현식
- 이미지 출력
- spring 프로젝트
- 삭제 구현
- 회원가입 기능
- 스프링 쇼핑몰 프로젝트
- 스프링 파일 삭제
- oracle 설치방법
- arraylist
- 스프링 쇼핑몰
- 파일 업로드
- 스프링 포트폴리오
- 스프링 프로젝트
- 쇼핑몰 포트폴리오
- ResponseEntity
- BCrypt 적용
- 쇼핑몰 프로젝트
- 인증번호 전송
- 스프링 HikariCP
- 스프링 게시판 구현
- 로그인 기능
- Bcrypt
- 로그아웃 기능 구현
- 스프링 프로젝트 설정
- 스프링 메일 전송
Archives
- Today
- Total
Kim VamPa
[Spring][쇼핑몰 프로젝트][29] 상품 이미지 수정 - 8(배치 프로그램 적용 5) 본문
728x90
반응형
프로젝트 Github : https://github.com/sjinjin7/Blog_Project
프로젝트 포스팅 색인(index) : https://kimvampa.tistory.com/188
목표
DB에 정보가 존재하지 않는 이미지 파일 삭제 작업 구현
앞선 포스팅에서 테스트 한 코드를 활용하여 최종적으로 하루에 한 번 일괄적으로 DB에 정보가 존재하지 않는 이미지 파일을 삭제하는 코드를 작성할 것입니다.
순서
1. 배치(Batch) 작업 클래스 생성
2. 이미지 파일(DB 존재X) 삭제 코드 작성
3. 테스트
1. 배치(Batch) 작업 클래스 생성
com.vam.task 패키지에 AttachFileCheckTask 클래스를 생성합니다.
해당 클래스 파일을 열어 @Log4j, @Component 어노테이션을 추가해주고, AdminMapper클래스를 의존성 주입해줍니다.
2. 이미지 파일(DB 존재 X) 삭제 코드 작성
AttachFileCheckTask 클래스 구현부에 아래의 코드를 추가해줍니다. 매일 새벽 1시에 배치 프로그램이 수행하도록 cron 값을 부여하였습니다.
private String getFolderYesterDay() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
String str = sdf.format(cal.getTime());
return str.replace("-", File.separator);
}
@Scheduled(cron="0 0 1 * * *")
public void checkFiles() throws Exception{
log.warn("File Check Task Run..........");
log.warn(new Date());
log.warn("========================================");
// DB에 저장된 파일 리스트
List<AttachImageVO> fileList = mapper.checkFileList();
// 비교 기준 파일 리스트(Path객체)
List<Path> checkFilePath = new ArrayList<Path>();
//원본 이미지
fileList.forEach(vo -> {
Path path = Paths.get("C:\\upload", vo.getUploadPath(), vo.getUuid() + "_" + vo.getFileName());
checkFilePath.add(path);
});
//썸네일 이미지
fileList.forEach(vo -> {
Path path = Paths.get("C:\\upload", vo.getUploadPath(), "s_" + vo.getUuid() + "_" + vo.getFileName());
checkFilePath.add(path);
});
// 디렉토리 파일 리스트
File targetDir = Paths.get("C:\\upload", getFolderYesterDay()).toFile();
File[] targetFile = targetDir.listFiles();
// 삭제 대상 파일 리스트(분류)
List<File> removeFileList = new ArrayList<File>(Arrays.asList(targetFile));
for(File file : targetFile){
checkFilePath.forEach(checkFile ->{
if(file.toPath().equals(checkFile))
removeFileList.remove(file);
});
}
// 삭제 대상 파일 제거
log.warn("file Delete : ");
for(File file : removeFileList) {
log.warn(file);
file.delete();
}
log.warn("========================================");
}
3. 테스트
서버를 구동시켜서 이미지 파일을 삭제하는 배치 프로그램이 정상적으로 동작하는지를 확인해보겠습니다. 구동시키기 앞서서 어제자 날짜의 폴더를 생성 후, 해당 폴더에 삭제시킬 이미지 파일들을 추가해줍니다.
배치 프로그램이 매일 새벽 1시에 동작하도록 cron 값을 설정하였는데 테스트를 위해 1분에 한 번씩 실행이 되도록 값을 변경하였습니다.
서버를 구동시켜 테스트를 합니다.
REFERENCE
- 코드로배우는 스프링 웹 프로젝트(남가람북스)
DATE
- 2020.07.30
728x90
반응형
'스프링 프레임워크 > 쇼핑몰 프로젝트' 카테고리의 다른 글
[Spring][쇼핑몰 프로젝트][31] 검색 구현(기본 기능 구현) (13) | 2021.08.24 |
---|---|
[Spring][쇼핑몰 프로젝트][30] (이미지 존재) 상품 정보 삭제 코드 보완 (4) | 2021.08.11 |
[Spring][쇼핑몰 프로젝트][29] 상품 이미지 수정 - 7(배치 프로그램 적용 4) (0) | 2021.07.29 |
[Spring][쇼핑몰 프로젝트][29] 상품 이미지 수정 - 6(배치 프로그램 적용 3) (0) | 2021.07.28 |
[Spring][쇼핑몰 프로젝트][29] 상품 이미지 수정 - 5(배치 프로그램 적용 2) (0) | 2021.07.27 |
Comments