머리말
타이밍 작업 기능은 스프링 부팅에서 구현됩니다. 스프링과 함께 제공되는 타이밍 작업 스케줄링을 사용할 수 있거나 통합 클래식 오픈 소스 구성 요소 쿼츠를 사용하여 작업 일정을 달성 할 수 있습니다.
이 기사는 Spring Boot에서 시간이 지정된 작업 구현에 대한 관련 내용을 자세히 소개하고 참조 및 학습을 위해 공유합니다. 아래에서 많이 말하지 않겠습니다. 자세한 소개를 함께 살펴 보겠습니다.
1. 스프링 타이머
1. 크론 발현 방법
내장 타이밍 작업을 사용하는 것은 매우 간단합니다. 다음과 같은 주석을 추가하면 일반 타이밍 작업 프레임 워크와 같은 타이밍 처리 인터페이스를 상속 할 필요가 없습니다. 간단한 예제 코드는 다음과 같습니다.
package com.power.demo.scheduledtask.simple; import com.power.demo.util.datetimeutil; import org.springframework.scheduling.annotation.enablescheduling; import org.springframework.scheduling.annotation.schedonted; import org.spramframframework.schedulted; java.util.date;@component@enableSchedulingpublic class springtaska {/** * cron 표현식 참조 : http://cron.qqe2.com/ **/@scheduled (cron = " */5 * * * *?", Zone = "gmt+8 : 00") 개인 void Timercron () {stride {slext (100); } catch (예외 e) {e.printstacktrace (); } system.out.println (String.format ( "(Timercron)%s 5 초마다 실행, 로깅", dateTimeUtil.fmtdate (new Date ())); }} Springtaska위의 코드에서 @enablescheduling annotation을 클래스에 추가하고 메소드에 @scheduled를 추가하고 CRON 표현식을 구성하며 가장 간단한 CRON 타이밍 작업이 완료됩니다. 다음은 CRON 표현의 구성 요소입니다.
@scheduled (cron = "[초] [분] [시간] [월] [월] [요일] [연도]")
2. 고정물 및 고정 벨레이
@Scheduled 주석은 CRON 표현식을 제거하고 FixedRate 및 FixedDelay와 같은 다른 구성 방법이 있습니다. 다음 예제는 다양한 구성 방법을 통해 다양한 형태의 타이밍 작업 예약을 구현합니다. 예제 코드는 다음과 같습니다.
package com.power.demo.scheduledtask.simple; import com.power.demo.util.datetimeutil; import org.springframework.scheduling.annotation.enablescheduling; import org.springframework.scheduling.annotation.schedonted; import org.spramframframework.schedulted; java.util.date;@component@enableSchedulingPublic Class SpringTaskb { /*fixtRate : 마지막 시간 지점 후 5 초 후에 다시 실행* / @scheduled (fixedRate = 5000) public void timerfixedRate () {try {thread.sleep (100); } catch (예외 e) {e.printstacktrace (); } system.out.println (String.format ( "(고정 레이트) 현재 시간 : %s", dateTimeUtil.fmtdate (new date ())); } /*fixedDelay : 마지막 실행 시간 지점 후 5 초를 실행하십시오* / @scheduled (fixedDelay = 5000) public void timerfixedDelay () {try {thread.sleep (100); } catch (예외 e) {e.printstacktrace (); } system.out.println (string.format ( "(고정화)) 현재 시간 : %s", datetimeUtil.fmtdate (new date ())); } /*첫 번째 지연 후 실행은 2 초 후에 실행 한 다음 FixedDelay 규칙* / @scheduled (ENEEDDELAY = 2000, FIXEDDELAY = 5000)에 따라 5 초마다 실행합니다. 공개 void TimerInitDelay () {try {thread.sleep (1000); } catch (예외 e) {e.printstacktrace (); } system.out.println (String.format ( "(initdelay) 현재 시간 : %s", dateTeMeUtil.fmtdate (new date ())); }} SpringTaskB주요 차이점에 유의하십시오.
@Scheduled(fixedRate = 5000) : 마지막 실행 시점 후 5 초 후에 다시 실행하십시오.
@Scheduled(fixedDelay = 5000) : 마지막 실행 시간 지점 후 5 초 동안 다시 실행합니다.
@Scheduled(initialDelay=2000, fixedDelay=5000) : 첫 번째 지연 후 실행은 2 초 후에 실행 한 다음 FixedDelay 규칙을 눌러 5 초마다 실행됩니다.
때로는 예정된 작업이 구성된 직후에 많은 프로젝트를 구성하고 실행해야하며 이니셜이 필요하지 않습니다.
3. 영역
@Scheduled 주석에는 친숙한 속성 영역이있어 시간대를 나타냅니다. 일반적으로 기록되지 않은 경우 타이밍 작업은 서버의 기본 시간대를 사용합니다. 예를 들어, 작업이 특정 시간대와 특정 시점에서 실행하려는 경우 일반적인 다국어 시스템이 정기적으로 데이터를 업데이트하기 위해 스크립트를 실행할 수 있으시면 다음으로 설정할 수있는 East 8th Zone과 같은 시간대를 설정할 수 있습니다.
zone = "GMT+8:00"
2. 쿼츠
Quartz는 가장 널리 사용되는 오픈 소스 작업 스케줄링 프레임 워크 중 하나이며 많은 회사가 자체 타이밍 작업 관리 시스템을 구현합니다. Quartz는 가장 일반적으로 사용되는 두 가지 타이밍 작업 트리거, 즉 Simpletrigger 및 Crontrigger를 제공합니다. 이 기사는 가장 널리 사용되는 Crontrigger를 예로 들어 본다.
1. 종속성 추가
<pectionency> <groupid> org.quartz-scheduler </groupid> <artifactid> quartz </artifactid> <버전> 2.3.0 </version> </fectionency>
2. CRON 표현식 구성
샘플 코드에 필요한 경우 Application.Properties 파일에 다음 구성을 추가하십시오.
## Quartz 시간이 정해진 작업 구성 작업 .Taska.cron = */3 * * * *? job.taskb.cron = */7 * * * *? job.taskmail.cron = */5 * * *? job.taskmail.cron = */5 * * *?
실제로 코드에 작성하거나 DB에 지속 된 다음 구성하지 않고 읽을 수 있습니다.
3. 구현할 시간이 지정된 작업을 추가하십시오
Task 1:
package com.power.demo.scheduledtask.quartz; import com.power.demo.util.datetimeutil; import org.quartz.disallowconcurrentexecution; import org.quartz.job; import org.quartz.jobexecutioncontext; import org.quartz.jobexecutionecutement; java.util.date; @DisallowConcurrentExecutionPublic Class Quartztaska 구현 작업 {@override public void execute (jobExecutionContext var1)는 jobExecutionException {try {thread.sleep (1); } catch (예외 e) {e.printstacktrace (); } system.out.println (String.format ( "(Quartztaska)%s마다 3 초마다 실행, 로그 로그", dateTimeUtil.fmtdate (new date ())); }} QuartztaskaTask 2:
package com.power.demo.scheduledtask.quartz; import com.power.demo.util.datetimeutil; import org.quartz.disallowconcurrentexecution; import org.quartz.job; import org.quartz.jobexecutioncontext; import org.quartz.jobexecutionecutement; java.util.date; @DisallowConcurrentExecutionPublic Class QuartzTaskb 구현 작업 {@override public void execute (jobExecutionContext var1)는 jobExecutionException {try {thread.sleep (100); } catch (예외 e) {e.printstacktrace (); } system.out.println (String.format ( "(QuartzTaskb)%s 7 초마다 실행, 로그 로그", dateTemeUtil.fmtdate (new date ())); }} quartztaskb이메일 작업을 적시에 보내기 :
package com.power.demo.scheduledtask.quartz; import com.power.demo.service.contract.mailservice; import com.power.demo.util.datetimeutil; import com.power.demo.util.powerlogger; import org.joda.datetime; import org.quartz.disallowconcurrentexecution; import org.quartz.job; import org.quartz.jobexecutioncontext; import org.quartz.jobexecutionException; import org.springframework.beans.beans.beans.beans.beans.bean.beans.beans.beans.beans.beans.beans.beans.beans.annotation.autowired; import java.util.date; @disconconcututioncutioncutioncutioncutioncutioncutioncutioncutioncutioncutioncutioncution 작업 {@autowired 개인 메일 서비스 메일 서비스; @override public void execute (jobExecutionContext var1)는 jobExecutionException {system.out.println ( "(mailsendtask)%s 5 초마다 메일을 보내기", dateTemeUtil.fmtdate (new date ())); {//thread.sleep(1); dateTime dtnow = new DateTime (new date ()); 날짜 시작 시간 = dtnow.minusmonths (1) .todate (); // 한 달 전 날짜 endtime = dtnow.plusdays (1) .todate (); MailService.AUTOSEND (STARTTIME, ENDTIME); PowerLogger.info (String.format ( "메일 보내기, 시작 시간 : %s, 종료 시간 : %s", datetimeutil.fmtdate (starttime), dateTeMeUtil.fmtDate (endTime))); } catch (예외 e) {e.printstacktrace (); PowerLogger.info (String.format ( "메일 보내기, 예외 : %s, 종료 시간 : %s", e); }}} MailSendTask작업 구현은 매우 간단 해 보이며 Quartz의 작업 인터페이스를 상속하고 실행 메소드를 다시 작성합니다.
4. 석영 타이밍 작업을 통합합니다
스프링이 석영 타이밍 작업 인스턴스의 초기화를 자동으로 인식하도록하는 방법은 무엇입니까? 이를 위해서는 스프링 관리 콩을 언급하고 필요한 콩을 스프링 컨테이너에 노출시키고 작업 공장을 정의하여 자동으로 주입해야합니다.
먼저, Spring Injected Job Factory 클래스를 추가하십시오.
package com.power.demo.scheduledtask.quartz.config; import org.quartz.spi.triggerfiredbundle; import org.spramframework.beans.config.autowecapablebeanbeantory; import org.springframework.context.applicationcontext; org.springframework.context.applicationcontextaware; import org.springframework.scheduling.quartz.springbeanjobfactory; public final class autowirebeanjobfactory 확장 SpringbeanBeanBeantory Pements ApplicationContextAware {개인 과도 AutowiRecapablebeanfactory; /*** Spring은 ApplicationContext acc 인터페이스, * 콩이 속한 컨텍스트를 전달합니다. **/ @override public void setApplicationContext (Final ApplicationContext Context) {beanFactory = context.getAutowEcapableBeanFactory (); } @Override Protected Object CreateJobinstance (Final TriggerFiredBundle Bundle) Exception {Final Object Job = Super.CreateJobinstance (번들); beanfactory.autowirebean (직업); 귀환 작업; }} autowirebeanjobfactoryQuartzConfig 정의 :
package com.power.demo.scheduledtask.quartz.config; import org.springframework.beans.factory.annotation.autowired; import org.springframework.beans.actory.annotation.qualifier; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; import org.springframework.scheduling.quartz.crontriggerfactorybean; import org.springframework.scheduling.quartz.schedulerfactorybean; @configurationpublic class quartzconfig {@autowired @Qualifier ( "QuartzTaskatrigger") Private CrontriggerFactoryBean QuartzTaskatrigger; @autowired @qualifier ( "Quartztaskbtrigger") private crontriggerfactorybean Quartztaskbtrigger; @autowired @Qualifier ( "MailSendTrigger") Private CrontriggerFactoryBean MailSendTrigger; // Quartz의 작업은 스프링 컨테이너로 호스팅 된 객체를 자동으로 주입합니다. @bean public autowirebeanjobfactory autowiringspringbeanjobfactory () {return new autowirebeanjobfactory (); } @bean public schedulerfactorybean schedulerfactorybean () {schedulerfactorybean scheduler = new SchedulerFactoryBean (); Scheduler.setJobFactory (AutowiringspringBeanJobfactory ()); // 스프링으로 주입 된 작업 클래스를 구성 // CrontriggerFactoryBean을 설정하고 작업 트리거 스케줄러를 설정합니다. Settriggers (QuartzTaskatrigger.getObject (), QuartzTaskBtrigger.getObject (), MailSendtrigger.getObject ()); 반환 스케줄러; }} QuartzConfig다음으로 작업 세부 사항을 구성하십시오.
package com.power.demo.scheduledtask.quartz.config; import com.power.demo.util.configutil; import com.power.demo.scheduledtask.quartz.mailsendtask; import com.power.demo.scheduledtask.quartz.quartztaska; com.power.demo.scheduledtask.quartz.quartztaskb; import com.power.demo.util.configutil; import org.spramframework.context.annotation.bean; import org.spramework.context.annotation.configuration; import org.springframework.scheduling.quartz.crontriggerfactorybean; import org.springframework.scheduling.quartz.jobdetailfactorybean; @configurationpublic class tasksetting {@bean (public jobdetailficlorybean jobdetaileavebean jobdetaile {@bean JobDetail jobDetailFactoryBean Factory = New JobDetailFactoryBean (); Factory.setjobclass (Quartztaska.class); // 해당 작업 공장을 설정합니다 .SetGroup ( "QuartzTaskGroup"); Factory.SetName ( "Quartztaskajob"); Factory.Setderability (False); Factory.SetDescription ( "테스트 작업 A"); 반품 공장; } @Bean (이름 = "QuartzTaskatrigger") public crontriggerContoryBean CrontriggerAfactoryBean () {String Cron = configutil.getConfigVal (appfield.job_taska_cron); CrontriggerCfactoryBean stfactory = New CrontriggerFactoryBean (); // set jobDetail stFactory.setJobDetail (jobDetailAfactoryBean (). getObject ()); stfactory.setstartdelay (1000); stfactory.setName ( "QuartzTaskatrigger"); stfactory.setgroup ( "Quartztaskgroup"); stfactory.setcronexpression (cron); 반환 문자를 반환합니다. } @Bean (name = "QuartzTaskb") 공개 jobDetailFactoryBean jobDetailBfactoryBean () {// jobDetail jobDetailFactoryBean Factory = 새로운 jobDetailFactoryBean (); Factory.setjobclass (Quartztaskb.class); // 해당 작업 공장을 설정합니다 .SetGroup ( "QuartzTaskGroup"); Factory.SetName ( "QuartztaskBjob"); Factory.Setderability (False); Factory.SetDescription ( "테스트 작업 B"); 반품 공장; } @Bean (이름 = "QuartzTaskBtrigger") public crontriggerFactoryBean CrontriggerBfactoryBean () {String Cron = configutil.getConfigVal (appfield.job_taskb_cron); CrontriggerCfactoryBean stfactory = New CrontriggerFactoryBean (); // set jobDetail stFactory.setJobDetail (jobDetailBfactoryBean (). getObject ()); stfactory.setstartdelay (1000); stfactory.setName ( "QuartzTaskBtrigger"); stfactory.setgroup ( "Quartztaskgroup"); stfactory.setcronexpression (cron); 반환 문자를 반환합니다. } @Bean (name = "mailsendtask") 공개 jobDetailFactoryBean jobDetailMailFactoryBean () {// jobDetail jobDetailFactoryBean Factory = 새로운 jobDetailFactoryBean (); Factory.setjobclass (MailSendTask.class); // 해당 작업 공장을 설정합니다 .SetGroup ( "QuartzTaskGroup"); Factory.SetName ( "MailSendTaskJob"); Factory.Setderability (False); Factory.SetDescription ( "MailSendTrigger"); 반품 공장; } @Bean (이름 = "MailSendTrigger") public crontriggerFactoryBean CrontriggerMailFactoryBean () {String Cron = configutil.getConfigVal (appfield.job_taskmail_cron); CrontriggerCfactoryBean stfactory = New CrontriggerFactoryBean (); // jobDetail stFactory.setJobDetail 세트 (jobDetailMailFactoryBean (). getObject ()); stfactory.setstartdelay (1000); stfactory.setName ( "MailSendTrigger"); stfactory.setgroup ( "Quartztaskgroup"); stfactory.setcronexpression (cron); 반환 문자를 반환합니다. }} 작업 세트마지막으로 Spring Boot 타이밍 작업 응용 프로그램을 시작하면 석영 일정을 기반으로 한 완전한 타이밍 작업이 구현됩니다.
이 시간이 정해진 작업 예에는 타임 메일 보내기 작업 MailSendTask가 있습니다. 다음 기사는 MongoDB를 스토리지 매체로 사용하여 Spring Boot 응용 프로그램의 간단한 메일 시스템을 공유합니다.
확장 된 독서 :
많은 회사들이 자체 시간이 지정된 작업 스케줄링 프레임 워크 및 시스템을 가지고 있습니다. 스프링 부트에서 석영 클러스터를 통합하여 동적 시간이 정한 작업 구성을 구현하는 방법은 무엇입니까?
참조 :
//www.vevb.com/article/139591.htm
//www.vevb.com/article/139597.htm
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.