티스토리

운클라우드
Wooncloud Blog
운클라우드
  • 분류 전체보기
    • 이야기
      • 일기
      • 개발일지
      • 제품 리뷰
      • 기타
    • 정보
      • 유용한 사이트
    • 개발 아카이브
      • HTML, CSS
      • Javascript
      • SVELTEKIT
      • Node Js
      • JAVA
      • Spring
      • 코드 저장소
      • 라이브러리
      • 개발 관련 지식
      • AWS, Cloud, Server
      • DATABASE
    • 스터디
      • 정보처리기사
      • 친절한 SQL 튜닝 스터디

블로그 메뉴

  • 홈
  • 방명록
  • 운구름 웹
  • 벨로그
  • 깃허브
  • 리틀리
  • 도시부엉

인기 글

최근 글

태그

  • 스터디
  • 마크다운
  • 이클립스
  • 리뷰
  • 정보처리기사
  • 회고
  • 자바
  • 폰트
  • TurboFan
  • Java
  • 웹디자인
  • html
  • API
  • CSS
  • javascript
  • 라이브러리
  • 자바스크립트
  • 코드저장소
  • 튜닝
  • SQL
전체 방문자
오늘
어제
hELLO · Designed By 정상우.
운클라우드

Wooncloud Blog

[Spring] 스케줄러 Cron 사용하기
개발 아카이브/Spring

[Spring] 스케줄러 Cron 사용하기

2021. 8. 10. 00:41
반응형

스프링 프로젝트를 개발하면서 시스템이 커지고 DB 또는 다양한 서비스를 위해 어떤 모듈들을 주기적으로 실행해야 할 때가 옵니다.

그럴 때 사용하는 것이 스케줄러입니다.

 

스프링에서 스케줄러 사용방법은 쉽습니다.

servlet-context.xml에서 task namespace를 추가하고 bean을 참조하여 cron 표현식으로 언제 주기적으로 등록한 메서드를 실행할지 선언만 해주면 됩니다.

 

스프링 프로젝트를 구축하고 간단하게 따라해 봅시다.

 

 

1. servlet-context.xml에 scheduled-tasks 추가

servlet-context.xml에 namespace에서 task를 추가합니다.

이클립스의 servlet-context.xml의 task namespace 추가

그럼 <task:태그를 사용할 수 있게 됩니다.

servlet-context.xml에 다음과 같이 추가합니다.

 

1
2
<task:annotation-driven scheduler="scheduler"/>
<task:scheduler id="scheduler" pool-size="10"/>
cs

 

 

물론 context:component-scan도 추가 되어 있어야 합니다.

1
<context:component-scan base-package="com.min.edu" />
cs



 

 

 

2. Cron 설정

이제 2가지의 Cron을 세팅하는 방법이 있습니다.

1. servlet-context.xml에서 <task:scheduled-tasks>를 이용해 bean을 등록하여 cron을 설정

2. 직접 bean에서 @Scheduled 어노테이션을 추가하여 cron을 설정

 

두 방법을 다 알려드리겠습니다.

 

 

2-1. servlet-context.xml에서 cron 세팅

아래와 같이 task:scheduled-tasks을 추가하여 task:scheduled안에 bean을 등록합니다.

1
2
3
4
5
<task:scheduled-tasks>
    <!-- 5초에 1번씩 -->
    <task:scheduled ref="cronTest" method="test" cron="0/5 * * * * ?"/>
</task:scheduled-tasks>
Colored by Color Scripter
cs
  • ref는 @Component, @Controller, @Service, @Repository 등 stereoType으로 등록된 빈 이름을 추가합니다.
    ref에는 반드시 클래스 이름을 camel 명명법으로 입력하세요.
  • method는 스케줄러로 실행할 메서드명입니다.
  • cron 표현식을 사용하여 설정합니다. (cron 표현식은 아래에서 다루겠습니다.)
    Cron 표현식으로 이동 🔽

 

가볍게 CronTest를 추가하여 실행해 봅니다.

package com.min.edu.cron;

import org.springframework.stereotype.Component;

@Component
public class CronTest {
    
    public void test() {
        System.out.println("cron 테스트 : 5초에 1번씩 console 찍기");
    }
}

5초마다 syso가 찍히는 모습

 

 

2-2. @Scheduled로 cron 세팅

위의 코드에서 @Scheduled Annotation을 추가한 메서드를 추가해 보겠습니다.

package com.min.edu.cron;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Component
public class CronTest {
    
    public void test() {
        System.out.println("cron 테스트 : 5초에 1번씩 console 찍기");
    }
    
    @Scheduled(cron="0/10 * * * * *")
    public void test2() {
        System.out.println("@Scheduled annotation : 10초에 1번씩 console 찍기");
    }
}

cron 표현식을 보면 10초에 1번 실행하도록 설정했습니다.

그리고 바로 실행!

 

@Scheduled 으로 추가한 메서드는 10초에 1번 찍히는 모습

 

 

이러한 방법으로 DB도 스케줄링을 통해 주기적으로 쿼리를 실행하는 등 관리할 수 있습니다.

 

 

 

 

728x90

 

 

 

Cron 표현식

출처 : https://madplay.github.io/post/a-guide-to-cron-expression 를 인용하여 설명했습니다.

출처 : https://madplay.github.io/post/a-guide-to-cron-expression

Cron 표현식의 각 시간단위는 아래의 범위로 구성이 됩니다.

초 분 시 일 월 요일 년도
0 ~ 59 0 ~ 59 0 ~ 23 1 ~ 31 1 ~ 12 0 ~ 6 *생략가능*

 

Cron 표현식 특수문자

  • * : 모든 값(매시, 매일, 매주처럼 사용한다.)
  • ? : 특정 값이 아닌 어떤 값이든 상관 없음
  • - : 범위를 지정할 때
  • , : 여러 값을 지정할 때
  • / : 증분값, 즉 초기값과 증가치를 설정할 때
  • L : 지정할 수 있는 범위의 마지막 값 표시
  • W : 가장 가까운 평일(weekday)을 설정할 때
  • # : N번 째 특정 요일을 설정할 때

 

예제

매 10분마다
0 0/10 * * * *

매 3시간마다
0 0 0/3 * * *

2018년도 매일 14시 30분마다
0 30 14 * * * 2018

매일 10시 ~ 19시 사이에 10분 간격으로
0 0/10 10-19 * * *

매일 10시와 19시에만 10분 간격으로
0 0/10 10,19 * * *

매달 25일 01시 30분에
0 30 1 25 * *

매주 월, 금요일 10시와 19시 사이 10분마다
0 10 10-19 ? * MON,FRI

매달 마지막날 15시 30분
0 30 15 L * *

2017~2018년 매월의 마지막 토요일 오후 1시 20분
0 20 13 ? * 6L 2017-2018

 

CronMaker

http://www.cronmaker.com/?1 

 

CronMaker

 

www.cronmaker.com

위의 링크를 통해 Cron을 쉽게 작성할 수 있습니다.

 

 

참고링크

https://en.wikipedia.org/wiki/Cron#CRON_expression

 

cron - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Time-based job scheduler for Unix-like operating systems The software utility cron also known as cron job[1][2] is a time-based job scheduler in Unix-like computer operating systems. U

en.wikipedia.org

https://zamezzz.tistory.com/197

 

[Cron] 크론(cron) 표현식 정리

■ Cron (크론) cron이란? 유닉스 계열의 잡 스케줄러 ● Cron 표현식 - 필드 Cron 스케줄러의 정규 표현식입니다. 7개의 각 필드로 구성되어 있으며, 각 필드의 내용은 아래와 같습니다. 자세한 설명

zamezzz.tistory.com

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'개발 아카이브 > Spring' 카테고리의 다른 글

[Spring] @Autowired를 지혜롭게 하는 법.  (0) 2021.10.21
    '개발 아카이브/Spring' 카테고리의 다른 글
    • [Spring] @Autowired를 지혜롭게 하는 법.

    티스토리툴바