티스토리 뷰
안녕하세요. 오늘은 제가 프로젝트 진행 중에 스프링에서 스케줄링 하는 방법에 대해서 알게 되어서 기록을 남기고 제가 모를때 다시 참조하거나
혹시 저와 같이 모르는 분들에게 도움이 되고자 포스팅을 하려고 합니다. :)
즉, 우리는 종종 프로젝트를 진행하다 보면 스케줄러(일명 : 배치 크론탭)을 사용할 때가 있습니다.
스케줄링을 하기 위해서 스케줄링을 하기 위한 메소드 위에 @Scheduled이라는 어노테이션을 선언해주면 됩니다.
그리고 @Scheduled( cron="*/30 * * * * *" )
위와 같이 선언하게 되면 30초 마다 실행되는 것입니다.
자 그럼 여기서 cron 표현식에 대해서 알아보겠습니다.
필드 이름 |
허용 값 |
초(seconds) |
0 ~ 59 |
분(minutes) |
0 ~ 59 |
시(hours) |
0 ~ 23 |
날(day-of-month) |
1 ~ 31 |
달(month) |
1 ~ 12 or JAN ~ DEC |
요일(day-of-week) |
1 ~ 7 or SUN-SAT |
년도 |
빈값, 1970 ~ 2099 |
cron표현식의 특수문자
표현식 |
설명 |
예시 |
* |
모든 수를 나타냄 |
|
- |
값의 사이를 의미 |
* 10-13 * * * * 10,11,12,13분에 동작함 |
, |
특정값 지칭 |
* 10,11,13 * * * * 10,11,13분에 동작함 |
/ |
값의 증가를 표현 |
* 0/5 * * * * 0분부터 시작해서 5분마다 동작 |
? |
특별한 값이 없음을 나타냄(day-of-month, day-of-week 필드만 사용) |
|
L |
마지막 날을 나타냄(day-of-month, day-of-week 필드만 사용) |
|
그럼 위의 표현식을 사용한 예제에 대해서 알아보겠습니다.
예제)
초 분 시 일 월 주(년)
"0 0 02 * * ?" : 매일 새벽 두시
"0 0 12 * * ?" : 아무 요일, 매월, 매일 12:00:00
"0 15 10 ? * *" : 모든 요일, 매월, 아무 날이나 10:15:00
"0 15 10 * * ?" : 아무 요일, 매월, 매일 10:15:00
"0 15 10 * * ? *" : 모든 연도, 아무 요일, 매월, 매일 10:15
"0 15 10 * * ? : 2005" 2005년 아무 요일이나 매월, 매일 10:15
"0 * 14 * * ?" : 아무 요일, 매월, 매일, 14시 매분 0초
"0 0/5 14 * * ?" : 아무 요일, 매월, 매일, 14시 매 5분마다 0초
"0 0/5 14,18 * * ?" : 아무 요일, 매월, 매일, 14시, 18시 매 5분마다 0초
"0 0-5 14 * * ?" : 아무 요일, 매월, 매일, 14:00 부터 매 14:05까지 매 분 0초
"0 10,44 14 ? 3 WED" : 3월의 매 주 수요일, 아무 날짜나 14:10:00, 14:44:00
"0 15 10 ? * MON-FRI" : 월~금, 매월, 아무 날이나 10:15:00
"0 15 10 15 * ?" : 아무 요일, 매월 15일 10:15:00
"0 15 10 L * ?" : 아무 요일, 매월 마지막 날 10:15:00
"0 15 10 ? * 6L" : 매월 마지막 금요일 아무 날이나 10:15:00
"0 15 10 ? * 6L 2002-2005" : 2002년부터 2005년까지 매월 마지막 금요일 아무 날이나 10:15:00
"0 15 10 ? * 6#3" : 매월 3번째 금요일 아무 날이나 10:15:00
그럼 예제를 통해서 Spring 스케줄링 사용법에 대해서 알아보겠습니다.
먼저 Spring 설정 파일인 root-context를 아래와 같이 변경시켜 줍니다. class는 실제 파일이 위치한 곳을 잡아주면 됩니다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="scheduleService" class="com.spring.scheduler.Scheduler" />
<task:scheduler id="gsScheduler" pool-size="10" />
<task:executor id="gsTaskExecutor" pool-size="10" />
<task:annotation-driven executor="gsTaskExecutor"
scheduler="gsScheduler" />
<!-- Root Context: defines shared resources visible to all other web components -->
</beans>
그리고 나서 자바 소스를 통해 매일 45분마다 실행되도록 설정했습니다.
@Component public class Scheduler { @Scheduled(cron = "0 45 * * * *") public void cornTest() { System.out.println("매일 45분에 실행됩니다."); } }
그리고 45분이 되면 다음과 같은 결과창을 화면에 띄워줍니다.
정상적으로 스케줄링 된 소스가 실행된 것을 확인할 수 있습니다.
오늘의 포스팅은 여기까지고 다음에도 배운것을 토대로 도움이 될만한 것들을 계속적으로 포스팅하도록 하겠습니다.
감사합니다 :)
- Total
- Today
- Yesterday