SpringBoot集成Quartz来实现定时任务处理。
Quartz的功能很强大,我们今天只看下在SpringBoot中最基础的使用是怎么实现的。
先了解下我们在使用中遇到的一些API:
Job:调度器执行任务组件需要实现的接口。
QuartzJobBean:这个类实现了Job接口,继承它相当于实现Job。
JobDetail:用于定义作业的实例。
JobBuilder:定义/构建JobDetail实例。
Trigger:触发器,执行给定作业的计划的组件的实例。
SimpleTrigger:简单的实例
TriggerBuilder:用于定义/构建触发器实例。
Scheduler:与调度程序交互的主要API。
SimpleScheduleBuilder:可以创建一个简单的Scheduler生成器
一、引入依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency>
二、建两个定时任务业务类
类1:
packagecom.xing.studyboot.time.quartz; importjava.util.Date; importorg.quartz.JobExecutionContext; importorg.quartz.JobExecutionException; importorg.springframework.scheduling.quartz.QuartzJobBean; /*** Quartz定时任务业务类* @author xing* @createTime*/publicclassTestQuartzServiceextendsQuartzJobBean { protectedvoidexecuteInternal(JobExecutionContextcontext) throwsJobExecutionException { System.out.println("quartz定时任务1 "+newDate()); } }
类2:
packagecom.xing.studyboot.time.quartz; importjava.util.Date; importorg.quartz.JobExecutionContext; importorg.quartz.JobExecutionException; importorg.springframework.scheduling.quartz.QuartzJobBean; /*** Quartz定时任务业务类2* @author xing* @createTime*/publicclassTest2QuartzServiceextendsQuartzJobBean { protectedvoidexecuteInternal(JobExecutionContextcontext) throwsJobExecutionException { System.out.println("quartz定时任务2 "+newDate()); } }
三、在配置类中生命作业实例,并绑定触发器
packagecom.xing.studyboot.time.config; importorg.quartz.JobBuilder; importorg.quartz.JobDetail; importorg.quartz.SimpleScheduleBuilder; importorg.quartz.Trigger; importorg.quartz.TriggerBuilder; importorg.springframework.context.annotation.Bean; importorg.springframework.context.annotation.Configuration; importcom.xing.studyboot.time.quartz.Test2QuartzService; importcom.xing.studyboot.time.quartz.TestQuartzService; /*** Quartz定时器配置* @author xing* @createTime*/publicclassQuartzConfig { /*** 创建作业的实例。Job- TestQuartzService* @return*/publicJobDetailteatQuartzDetail(){ returnJobBuilder.newJob(TestQuartzService.class) .withIdentity("testQuartz")//如果没有设置,则将生成一个随机的、唯一的作业密钥。 .storeDurably()//默认值为false -此方法将该值设置为true。 .build(); } /*** 创建作业的实例。Job- Test2QuartzService* @return test1Quartz*/publicJobDetailteat2QuartzDetail(){ returnJobBuilder.newJob(Test2QuartzService.class) .withIdentity("test2Quartz") .storeDurably() .build(); } /*** 创建触发器,并绑定到 作业实例-teatQuartzDetail* @return*/publicTriggertestQuartzTrigger(){ SimpleScheduleBuilderscheduleBuilder=SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) //设置时间周期单位秒 .repeatForever();//更新前面创建的simpleSchedule设置returnTriggerBuilder.newTrigger() .forJob(teatQuartzDetail())//指定Job任务 .withIdentity("testQuartz") .withSchedule(scheduleBuilder)//指定配置的时间 .build(); } /*** 创建触发器,并绑定到 作业实例2-teat2QuartzDetail* @return test2Quartz*/publicTriggertest2QuartzTrigger(){ SimpleScheduleBuilderscheduleBuilder=SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(5) //设置时间周期单位秒 .repeatForever();//指定触发器将无限期重复。returnTriggerBuilder.newTrigger() .forJob(teat2QuartzDetail())//指定Job任务 .withIdentity("test2Quartz") .withSchedule(scheduleBuilder)//指定配置的时间 .build(); } }
四、启动项目:
分析结果发现:任务1十秒一次,任务2五秒一次。
总结:
Quartz功能很强大,不止可以设置间隔,包含了Spring Task的功能,还扩展了很多功能,比如暂停、删除等动态操作任务等等,具体的看包里的API即可。
END