본문 바로가기
Java

spring,java]스프링 Quartz 스케줄러 사용하기(배치)

by 완기 2021. 8. 18.
728x90
반응형

오늘은 프로그램이 특정 작업을 반복하는 배치(스케줄링)란 무엇인지 알아보고 간단한 예제를 통해 사용법을 알아본다.

 

회사에서 특정 시간마다 반복 작업으로 로그를 확인해서 로그에 이상이 있다면 Slack에 알림을 보내는 작업을 해야했다.

 

이렇게 되면 매 시간마다 로그를 확인하는 작업이 필요했고, 그 결과에 따라 알림 여부를 발송한다.

 

이러한 요구사항을 확인한 난 Spring Batch와 Quartz가 떠올랐다.

 

하지만 Spring Batch가 없어도 Quartz만으로 배치 모듈을 만들 수 있어서, Quartz만 쓰기로 했다.

 

 

참고 :

배치란?

쿼츠 공식 사이트


들어가기 전에 개발환경은 이러하다.

Java 11

Spring boot 2.5.3

gradle 7.1.1

 

 

implementation 'org.springframework.boot:spring-boot-starter-quartz'

build.gradle에 Quartz라이브러리를 사용하기 위해 추가한다.

 

그 다음,

메인 클래스에 @EnableScheduling어노테이션을 추가해준다.

 

이렇게 되면 기본적으로 Quartz를 사용하기 위한 준비는 모두 끝났다.

 

 

특정 작업을 반복적으로 실행할 테스트 메서드를 하나 준비한다.

 

메서드에 @Scheduled 어노테이션을 추가해주고, cron을 인자로 넣어주게되면,

리눅스에서 사용하는 크론탭과 동일한 표현식으로 메서드의 실행 시간을 정할 수 있다.

 

크론탭이 뭔지 모른다면? <

 

다만 차이가 있다면 크론탭은

분부터 시작하기 때문에 5개 항목만 입력하면 되지만,

쿼츠에선 초부터 시작하기 때문에 6개의 항목을 입력해서 정의해줘야한다.

300x250

예시에서 사용한

@Scheduled(cron = "* * * * * *")

의 경우 매 초마다 메서드가 실행된다.

 


실행해보기.

@Scheduled(cron = "* * * * * *")
   public void testQuartz() {
      LocalDateTime now = LocalDateTime.now();
      System.out.println(now.getHour() + ":" + now.getMinute() + ":" + now.getSecond());
   }

예제 메서드이다.

메서드가 실행될 때 마다, OS의 Time을 가져와서 출력한다.

 

위에서 언급한대로 1초마다 콘솔이 찍혀야한다.

 

잘 실행이 된 모습이다.

 

예제 2:)

@Scheduled(cron = "*/5 * * * * *")
   public void testQuartz() {
      LocalDateTime now = LocalDateTime.now();
      System.out.println(now.getHour() + ":" + now.getMinute() + ":" + now.getSecond());
   }

위 코드는 5초에 한번씩 실행하도록 만든 표현식이다.

5초가 지날 때 마다, 콘솔에 잘 찍히고 있는 모습이다.

 

 

이 처럼 기본적인 스케줄링을 위한 작업은 다 끝났다.

 

crontab 표현식 예제 <

 

위 링크의 예제를 통해서 자신만의 크론 표현식을 만들어 특정 시간에 특정 작업을 하는 프로그램을 작성해보자.

 

 

728x90
728x90

댓글