본문 바로가기

학습

Spring Scheduler란?

반응형

저번 Spring Batch Job를 개념부터 개발 학습까지 완료 한 후,

Spring Batch Job의 특성인 일괄처리 기능을 다양한 방법으로 자동화할 수 있는 방법이 있을까?

라는 고민에서 시작되었습니다. 그 중에서도 Scheduler라는 방법이 있다고 하는데, scheduler에 대해서 학습해보겠습니다. 

 

 

Scheduler 란?

특정한 시간에 등록된 작업을 자동으로 실행시키는 것입니다. (Spring Scehduler, Quartz등이 있습니다.) 

스케줄러를 실행하고자 하는 메소드명 위에 @Scheduled 어노테이션을 명시해 둡니다. 

동기적으로 스케줄러를 실행하기 되는데 이때 @Scheduled의 옵션으로 fixedRate, fixedDelay, cron을 사용해서 각기 다른 방식으로 동작시킬 수 있습니다. 

만약 단순한 Scheduling에 따른 작업이 필요하시다면 Spring Scheduler를, 좀 더 세밀한 제어가 필요할때는 Spring Quartz Scheduling을 사용합니다. 서비스 노드가 멀티이기 때문에 클러스터링이 필요할때 많이 사용합니다. 

Spring Scheduler의 특징

  • 추가적인 의존성 불필요 : Spring Framework의 기능
  • 사용이 쉬움 : @Component와 @Scheduled
  • 1개의 Thread pool사용 : schedule이 끝나야 다음 schedule 실행 가능 

 

Scheduler code

fixedRate : 작업의 시작부터 시간을 카운트 함

@Scheduled(fixedRate=1000)
public void fixedRateScheduler(){
	System.out.println("작업이 끝날때 까지 기다리지 않고 1000ms마다 실행된다");
    }

 

fixedDelay : 작업이 끝난 시점부터 시간을 카운트함 

@Schedueld(fixedDelay=1000)
public void fixedDelayScheduler(){
	System.out.println("나는 작업이 끝나고 나서 다시 1000ms후에 실행될꺼야");
    }

 

cron : 개발자가 초, 분, 시, 일, 월, 주, (년)을 지정해 스케줄러를 동작 시킵니다. 이때, (년)은 생략 가능 합니다. 

cron이 정확히 지정한 시간에서만 실행됨을 보장하기 때문에 예약 발송 스케줄러에 적합하다고 생각이 든다.

@Scheduled(cron="0/60 * * * * ?")
public void cronScheduled(){
	System.out.println("나는 시스템 시간을 기준으로 1분마다 주기적으로 실행될꺼야");
    }

 

반응형

'학습' 카테고리의 다른 글

서버, 클라이언트와 웹 서비스  (0) 2023.04.24
TCP/IP 데이터 통신  (0) 2023.04.24
HTTP 프로토콜 개념  (0) 2023.04.24
Spring Batch Job 개발 학습  (0) 2023.04.14
Spring Batch 개념  (0) 2023.04.05