스케줄러
- 주기적으로 매일, 매주, 매월 등 주기적으로 특정한 프로그램을 실행하기 위한 것
- Spring의 경우는 Spring-batch 혹은 Quartz 라이브러리를 이용하면 프로그램이 실행되는 동안 주기적인 스케줄링이 가능하다.
Spring에서 Quartz 라이브러리 설정
1. pom.xml
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.0</version>
</dependency>
- quartz와 quartz-jobs 디펜던시 등록.
2. root-context.xml 의 namepace에서 task 항목을 체크!
<context:component-scan base-package="org.zerock.task"></context:component-scan>
<task:annotation-driven />
- task:annotation-driven 태그 추가
- 스케줄러가 실행될 컨트롤러가 속한 패키지를 component-scan 처리한다.
3. 스케줄러 클래스 생성
package org.zerock.task;
@Log4j
@Component
public class FileCheckTask {
//DB에 간다면 Mapper 주입하면되고.
@Scheduled(cron="0 0 2 * * *") //매일 새벽2시마다 한번씩 실행
public void task1() throws Exception{
log.warn("File Check Task run......");
log.warn(new Date());
}
@Scheduled(fixedDelay = 1000) // 매초마다 실행
public void task2() throws Exception{
log.warn("File Check Task run......");
log.warn(new Date());
}
}
- @Scheduled 어노테이션 지정, cron 속성 지정
- cron 속성은 unix 계열에서 사용되던 이름이지만 워낙 많이 사용되다보니 각종 기술에 라이브러리 형태로 사용된다.
- cron = 초 분 시 일 월 day of week(요일) (선택: 년도)
-> 위의 속성을 예로 들면, 매 0초, 매 0분, 매 2시(새벽) 마다 checkFiles() 라는 메소드는 실행될 것이다.(프로그램 run 중일때만)
4. 왜 스케줄러를 사용하는가?
- 일정한 시각에 특정 작업을 처리해줘야만 할때.
- 제가 사용했던 케이스는 파일 업로드 관련 부분이었는데, 사용자가 파일업로드 하는 도중에 브라우저를 꺼버린 경우 데이터베이스 상 존재하는 파일 목록과 실제 서버 파일목록이 상이하게됨.
- 그래서 사람이 적은 새벽 2시경에 디비 파일목록과 서버 파일목록을 일치시켜주는 작업이 checkFiles() 메소드임.
- 무언가 주기적으로 반복되는 작업이 필요한 경우에 활용하면 좋을 듯 합니다.
'Back-end > JAVA & Spring' 카테고리의 다른 글
Log4j의 정의, 개념, 설정, 사용법 정리 ★ (0) | 2021.04.27 |
---|---|
[Java] 트랜잭션 처리하기 (0) | 2021.04.27 |
이클립스 디버그 모드 사용하기 (0) | 2021.04.27 |
[Spring] 메이븐(Maven)이란? (0) | 2021.04.20 |
[Maven] Nexus란? (0) | 2021.04.20 |
댓글