programing

스프링 스케줄링: @스케줄링 대 쿼츠

mailnote 2023. 8. 4. 23:15
반응형

스프링 스케줄링: @스케줄링 대 쿼츠

일정에 관한 Spring 3.0 문서를 읽고 있습니다.저는 Quartz를 위한 Spring's Job Detail Bean에 기대고 있습니다.하지만 @Scheduled 주석이 제 눈을 사로잡았습니다.Spring Framework를 사용하여 작업을 예약하는 또 다른 방법인 것 같습니다.문서를 기반으로 Spring은 세 가지 스케줄링 방법을 제공합니다.

  1. @예약됨
  2. 비아 쿼츠
  3. JDK 타이머를 통해

저는 JDK 타이머에 관심이 없습니다.Quartz보다 @Scheduled를 선택해야 하는 이유는 무엇입니까?(Quartz를 언급할 때는 Quartz를 위해 Spring의 콩 포장지를 사용하는 것을 의미합니다.)

제 사용 사례가 타사 웹 서비스와 통신하여 지정된 간격으로 데이터를 가져오고 내보낼 정도로 복잡하다고 가정해 보겠습니다.

Quartz는 Spring의 기본 제공 스케줄러보다 훨씬 복잡하며 영구, 트랜잭션 및 분산 작업에 대한 지원도 포함됩니다.Spring의 API를 지원하더라도 약간의 돼지입니다.

이 매스케줄에 method를 , "X" " " " " " " " " " " " " " " " " " " " 은 cron " " " " " " " " " " " " " " "@Scheduled(또는 Spring의 구성 스키마의 다양한 옵션)이면 충분할 것입니다.

의 사용에 관한 나만의 경험을 진술해야 합니다.@ScheduledQuartzSpring 응용 프로그램에서 스케줄링 구현으로 사용할 수 있습니다.

작업 예약에는 다음과 같은 요구 사항이 있었습니다.

  • 최종 사용자는 자신의 작업을 저장하고 예약할 수 있어야 합니다(실행 시간 정의).
  • 서버 다운타임 중에 예약된 작업을 작업 대기열에서 생략해서는 안 됩니다.

따라서 데이터베이스에서 작업의 지속성을 지원하기 위해 Quartz 구현(버전 2.2.3)을 사용해야 합니다.몇 가지 기본적인 결론은 다음과 같습니다.

  • Quartz를 사용하여 Spring 4 MVC 애플리케이션과 통합하는 것은 전혀 어렵지 않습니다.속성 파일입니다.
  • 기본 데이터베이스에서 작업을 저장할 두 번째 데이터베이스를 선택할 수 있습니다.
  • 서버 다운타임 중에 예약된 작업은 서버가 실행되는 동안 실행되기 시작합니다.
  • 예약 유용한 보다 지향적인) 할 수 있었습니다. 사용자 정의 작업에 대한 일부 한(그리고 보다 사용자 지향적인) 정보를 유지할 수 .JobListener그리고.TriggerListener.
  • Quartz는 더 복잡한 스케줄링 요구사항이 있는 응용프로그램에서 매우 유용한 라이브러리입니다.

Quartz Documentation에 따르면 @Scheduler에 없는 더 복잡한 기능을 사용할 수 있습니다.예:

  1. Quartz에서 우리는 스케줄러를 대기 모드로 배치할 수 있습니다.scheduler.standby();그리고 그것을 다시 예약합니다.scheduler.start();.
  2. 작업 실행 전 또는 실행 후 스케줄러 종료scheduler.shutdown(true);그리고.scheduler.shutdown(false);
  3. 나중에 사용할 수 있도록 작업을 저장하고 작업이 필요할 때 트리거할 수 있습니다.
JobDetail job1 =newJob(MyJobClass.class).
withIdentity("job1","group1").
storeDurably().
build();
  1. 새 작업을 스케줄러에 추가하고 기존 작업을 지정된 이름과 그룹(있는 경우)으로 "바꾸도록" 지시합니다.
JobDetail job1 = newJob(MyJobClass.class).
withIdentity("job1", "group1").
build();

봄에는 고정 속도, 고정 지연 및 cron을 사용하여 작업을 예약할 수 있습니다.그러나 대부분의 예약된 작업은 실행 시간을 동적으로 처리해야 합니다.따라서 이 시나리오에서는 예약된 작업을 RAMJobstore뿐 아니라 DBJobstore에 저장할 수 있는 옵션을 제공하므로 Quartz를 사용하는 것이 좋습니다.

Spring은 작업 예약을 위해 API를 구현하는 쉬운 방법을 제공합니다.애플리케이션의 여러 인스턴스를 배포하기 전까지는 효과적입니다.

Spring은 기본적으로 여러 인스턴스에 대한 스케줄러 동기화를 처리할 수 없습니다.대신 모든 노드에서 작업을 동시에 실행합니다.

예약된 작업이 동시에 한 번만 실행되도록 하는 Java 라이브러리인 ShedLock을 볼 수 있으며 Quartz를 대체할 수 있습니다.

언급URL : https://stackoverflow.com/questions/4385719/spring-scheduling-scheduled-vs-quartz

반응형