본문 바로가기
SPRING

[SPRING] Task Scheduler 설정 및 사용방법

by 김뚱 2019. 7. 2.

작업중에 주기적으로 DB를 백업하거나 특정시간 혹은 몇분 혹은 몇시간마다 동작하여 외부 시스템에 접속하여 데이터를 가져오는 등의 경우에 crontab과 같이 동작하는 프로그램을 스프링으로 구현할 수있다.

 

Spring에 Timer나 Quartz가 있지만, Task Scheduler 사용방법을 알아보도록 하겠다.

 

스프링 3.0부터 TaskExecutor와 TaskScheduler 인스턴스를 구성하는 XML 네임스페이스가 존재하고 트리거로 예약된 태스크를 구성하는 간편한 방법도 제공한다.

 

1. xml 설정

<?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: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">
        
    <task:annotation-driven />
    
</beans>

 

2. scheduler 

스프링 task 네임스페이스에서 가장 강력한 기능은 스프링 애플리케이션 컨텍스트에서 스케줄링 되는 태스크를 설정하는 기능이다.  기본적으로 "ref" 속성은 스프링이 관리하는 어떤 객체라도 가리킬 수 있고 "method" 속성은 해당 객체에서 호출될 메서드명을 지정한다.  

<task:scheduled-tasks scheduler="myScheduler">
  <task:scheduled ref="someObject" method="someMethod" fixed-rate="5000"/>
  <task:scheduled ref="anotherObject" method="anotherMethod" cron="*/5 * * * * MON-FRI"/>
</task:scheduled-tasks>

<task:scheduler id="myScheduler" pool-size="10"/>

<bean id="someObject" class="someMethod" />
<bean id="anotherObject" class="anotherMethod" />

예제에서 보듯이 외부 요소가 schedule를 참조하고 각 task는 트리거 메타데이터의 설정을 가지고 있다.  메타데이터는 고정된 지연시간을 가진 주기적인 트리거를 설정하거나(fixed-rate "cron"속성을 사용해서 더 세밀하게 제어할 수도 있다.  

 표현

의미 

 fixed-delay

이전에 실행된 task의 종료시간으로부터 정의된 시간만큼 지난 후 다음 task를 실행 (밀리세컨드 단위)

 fixed-rate

이전에 실행된 task의 시작 시간으로부터 정의된 시간만큼 지난 후 다음 task를 실행 (밀리세컨드 단위)

 

3.Cron Expression

"초 분 시 일 월 요일"

"*" 표시는 항상/모두 를 의미하는 expression이다. 

seconds에서 사용하면 매초, minutes에서 사용하면 매분, hours에서 사용하면 매시간을 의미한다.

"/" 표시는 시작시간과 반복 간격 설정을 의미한다.

seconds위치에 0/15로 설정하면 0초에 시작해서 15초 간격으로 동작, minutes위치에 5/10으로 설정하면 5분에 시작해서 10분 간격으로 동작한다.

순서

필드명

사용 가능한 값

 1

 seconds

 0~59 , - * /

 2

 minutes

 0~59 , - * /

 3

 hours

 0~23 , - * /

 4

 day of month

 1~31 , - * ? / L W

 5

 month

 1~12 or JAN-DEC , - * /

 6

 day of week

 1-7 or SUN-SAT , - * ? / L #

 7

 years (optional)

 1970~2099 , - * /

ex) 

표현식

의미 

 0 0 12 * * *

매일 12시에 실행 

 0 15 10 * * *

매일 10시 15분에 실행 

 0 * 14 * * *

매일 14시에 0분~59분까지 매분 실행

 0 0/5 14 * * *

매일 14시에 시작해서 5분 간격으로 실행 

 0 0/5 14,18 * * *

매일 14시, 18시에 시작해서 5분 간격으로 실행 

 0 0-5 14 * * *

매일 14시에 0분, 1분, 2분, 3분, 4분, 5분에 실행 

 0 0 20 ? * MON-FRI

월~금일 20시 0분 0초에 실행 

 0 0/5 14 * * ?

아무요일, 매월, 매일 14:00부터 14:05분까지 매분 0초 실행 (6번 실행됨)

 0 15 10 ? * 6L

 매월 마지막 금요일 아무날이나 10:15:00에 실행

 0 15 10 15 * ?

아무요일, 매월 15일 10:15:00에 실행 

 * /1 * * * *

매 1분마다 실행

 * /10 * * * *

매 10분마다 실행 

 

 

Reference

https://blog.outsider.ne.kr/1066

 

[Spring 레퍼런스] 26장 태스크(Task) 실행과 스케줄링 :: Outsider's Dev Story

이 문서는 개인적인 목적이나 배포하기 위해서 복사할 수 있다. 출력물이든 디지털 문서든 각 복사본에 어떤 비용도 청구할 수 없고 모든 복사본에는 이 카피라이트 문구가 있어야 한다. ## 26. 태스크(Task)...

blog.outsider.ne.kr

https://javafactory.tistory.com/1386

 

Spring Scheduler(스프링 스케쥴러) 설정방법 및 사용방법

스프링에서 Unix의 Corn 처럼 특정시간 혹은 몇분 혹은 몇시간마다 동작해는 스케쥴러를 구현해야 했다. 그래서 찾아보게 된게 Spring + Quartz Scheduler 조합의 활용이었다. 하지만 Spring 3.1 버전 부터는 Quar..

javafactory.tistory.com

http://webprogramer.kr/blog/P000000289/post.do

 

Spring Task Scheduler 손쉽게 설정하기

Hyun.jo IT 분야에서 일하고 있습니다. 개발 및 일상적인 내용들을 포스팅 합니다.

webprogramer.kr

 

728x90
반응형

'SPRING' 카테고리의 다른 글

[SPRING] ResponseEntity  (1) 2019.07.05
[SPRING] RestTemplate  (0) 2019.07.04
[SPRING] Tomcat JNDI 설정  (0) 2019.06.16
[SPRING] 파일업로드  (0) 2019.03.06

댓글