[Spring] Quartz 라이브러리를 이용한 스케쥴러 설정
- 웹 개발/Spring Framework
- 2019. 10. 4. 12:45
스케줄러
- 주기적으로 매일, 매주, 매월 등 주기적으로 특정한 프로그램을 실행하기 위한 것
- 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() 메소드임.
- 무언가 주기적으로 반복되는 작업이 필요한 경우에 활용하면 좋을 듯 합니다.
'웹 개발 > Spring Framework' 카테고리의 다른 글
[Spring Framework] Java 리플렉션을 이용한 Dependency Injection(의존성 주입) 예제 로직 구현 (0) | 2020.01.06 |
---|---|
[Spring] 스프링 프레임워크 Lombok 라이브러리 (0) | 2019.10.28 |
[Spring] @Transactional 어노테이션 사용 및 예제! (0) | 2019.09.12 |
[Spring framework] 스프링 MVC에서 잘 사용되는 객체, 용어 정리 (1) | 2019.09.03 |
[Spring Framework] 스프링 xml 설정을 Java 클래스로 하는 방법 (0) | 2019.09.03 |