700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Spring Boot定时任务-SpringBoot整合Quartz

Spring Boot定时任务-SpringBoot整合Quartz

时间:2021-10-23 06:54:59

相关推荐

Spring Boot定时任务-SpringBoot整合Quartz

如何通过SpringBoot整合Quartz框架,我们首先去创建一个项目,接下来我们需要在pom文件里添加坐标,我们在使用SpringBoot整合Quartz的时候,需要添加哪些坐标呢,我们来看一下,在这里我们需要添加三个坐标,第一个是quartz的坐标<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version><exclusions><exclusion><artifactId>slf4j-api</artifactId><groupId>org.slf4j</groupId></exclusion></exclusions></dependency>我们在SpringBoot整合Quartz的时候,把日志记录的jar包去掉,一个exclusions就可以了,因为这个已经在WEB启动器里面包含了,第二个我们还得去导入spring-context-support 的jar包<dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency>这个jar包我们之前用过,就是用Spring自带的Schedule,用它去做定时任务的时候,其实我们现在使用SpirngBoot去整合Quartz的时候,SpringBoot对于Quartz的支持,仍然需要spring-context-support这个jar包,Spring-tx,事务的jar包<dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId></dependency>我们在Quartz当中呢,把这个jar包拿过来,在这里把这三个添加进来,修改pom文件,添加坐标,第一个我们修改完毕以后呢,接下来我们就可以去做我们的定时任务了,我们还是先去创建一个Job的任务类,我把它放到一个叫Quartz的包下,/*** Job类*/public class QuartzDemo2 implements Job {@Overridepublic void execute(JobExecutionContext arg0) throws JobExecutionException {System.out.println("Execute2...."+new Date());}}需要让他去实现一个Job接口,这个是我们的任务类,我们任务调用会触发的一个方法,我们这里打印一句话,有了任务类以后呢,有了任务类以后呢,接下来我们就来编写一个在SPRINGBoot当中,Quartz的配置类,那么在这个配置类当中呢,我们就要去完成SpringBoot对于Quartz的一些配置信息,既然是配置类,还有一个@Configuration的注解,在这里我要提供三个方法,这三个方法分别是干嘛的呢,其实就是使用Quartz基本的实现,第一个是创建Job对象,第二步就是创建Trigger对象,然后第三步就是创建我们的Scheduler对象,我们接下来看,这每一个步骤该怎么去做,我们先来看第一步,创建Job对象,要用到一个@Bean标签,然后在这里要提供一个方法,这个方法要返回一个JobDetailFactoryBean对象,然后我们起个名,这个名叫什么都行,然后在这个方法当中呢,我们要去创建JobDetailFactoryBean对象,最后我们的方法肯定是返回这个factory对象,既然我们来看一下,在这个对象当中,怎么去关联我们已定义的Job,现在Job是类,我怎么把它实例化出来,怎么关联他呢,在我们的方法当中,关联我们自己的Job类,factory下面有一个方法叫setJobClass,在这里把我们的Job类的模板给他,然后将我们的factory返回,这样就完成了一个Job实例化的工作,/*** 1.创建Job对象*/@Beanpublic JobDetailFactoryBean jobDetailFactoryBean(){JobDetailFactoryBean factory = new JobDetailFactoryBean();//关联我们自己的Job类factory.setJobClass(QuartzDemo2.class);return factory;}第二步我们来创建Trigger,这种Trigger也是分为两种,一种是简单的Trigger,还有一个是cron的Trigger,先来创建一个简单的Trigger,我们用的是SimpleTriggerFactoryBean,我们需要这个方法返回一个SimpleTriggerFactoryBean的返回值,然后这个方法名叫什么都可以,在这个对象当中呢,就完成一个Trigger的实例,Trigger的创建,首先我肯定要先去new这个对象,最后也是返回这个factory,然后我们在这个对象下,怎么去关联我们的JobDetailFactoryBean,我们不是已经把Job类和JobDetail类关联了吗,那我们的Trigger也就是什么时间做,做什么做关联,所以我这个方法需要一个入参,这个入参的类型就是我们返回返回的类型,然后在这里,我们通过SimpleTriggerFactoryBean对象,调他的一个方法,setJobDetail,那么这个job在哪儿呢,是不是在jobDetailFactoryBean里面放的呢,我们用入参来getObject,这样就关联了我们的JobDetail对象,除了关联这个对象以外,Trigger是要设置一个触发的时间的,那我们来看怎么来设置它的触发时间,在这里我们就用他的一个方法,叫setRepeatInterval,这个方法里需要一个Long型的参数,这个Long型的参数是什么呢,其实就是一个毫秒数,这里我们加一个说明,该参数表示一个执行的毫秒数,他的单位是毫秒,比如我们还是让他以两秒的间隔执行我们的任务,我们这里给一个2000,这里只是表示他不停的重复,除此之外我们还可以设置他的重复次数,比如我们之前再讲简单案例的时候,在这里我们也可以设置重复的次数,这个叫setRepeatCount,执行5次,重复4次,这个是设置重复次数,/*** 2.创建Trigger对象* 简单的Trigger*/@Beanpublic SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){SimpleTriggerFactoryBean factory = new SimpleTriggerFactoryBean();//关联JobDetail对象factory.setJobDetail(jobDetailFactoryBean.getObject());//该参数表示一个执行的毫秒数factory.setRepeatInterval(2000);//重复次数factory.setRepeatCount(5);return factory;}创建的是一个简单的Trigger,其实第三步就是创建Scheduler对象的,还是用一个@Bean,然后这里会提供一个方法,这个方法会返回一个SchedulerFactoryBean,所以他们都会返回一个什么factoryBean,这里我们给他起一个名字,这个方法叫什么都行,我们之前讲过Scheduler的作用,会帮我们的Job,还有Trigger整合到一起,那我们现在已经完成了Job到Trigger的一个整合,我们已经做了一个关联,我们就把Trigger关联到Scheduler的对象当中,所以我们这个方法仍然需要一个入参,这个入参类型就是cronTriggerFactoryBean,在这里我们仍然是创建SchedulerFactoryBean的对象,最后我肯定也是返回这个factory,然后=我们在这里如何去关联呢,第一个我们先关联Trigger,关联Trigger我们就是用方法setTriggers,是不是在SimpleTriggerFactoryBean这里放着呢,通过入参调用getObject,这样就把工厂的TriggerBean对象取出来,放到Scheduler的对象当中,然后接下来我们需不需要在这里去启动呢,我们原来在写这个案例的时候知道,我设置完Scheduler的时候,要用到Scheduler的对象去启动,这里很显然不用了,这样我们一个整合的过程就完成了,那怎么启动呢,这里还要回到我们的启动类里面去说@Beanpublic SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean){SchedulerFactoryBean factory = new SchedulerFactoryBean();//关联triggerfactory.setTriggers(simpleTriggerFactoryBean.getObject());return factory;}这里是编写Quartz的配置类,然后我们怎么去启动呢,在启动类当中,SpringBoot整合Quartz的案例,我们仍然要用@EnableScheduling的注解,这样才能去启动我们的Quartz@SpringBootApplication@EnableSchedulingpublic class QuartzApp {public static void main(String[] args) {SpringApplication.run(QuartzApp.class, args);}}修改启动类,那么其实我们使用SpringBoot去整合Quartz,已经整合完毕了,我们来测试一下,从启动类开始启动,然后我们观察控制台,以两秒的间隔去重复,然后我们定的是5次,我们给的是重复五次factory.setRepeatCount(5);重复五次,然后再加上1次就是6次,没有问题的,以上就是使用SpringBoot整合Quartz的一个案例,但是这里注意一下,现在我们用的Trigger呢,简单的Trigger,如果还想用cron,来定义这个Trigger,我们可以在这里去实现一下,/*** Cron Trigger*/@Beanpublic CronTriggerFactoryBean cronTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){CronTriggerFactoryBean factory = new CronTriggerFactoryBean();factory.setJobDetail(jobDetailFactoryBean.getObject());//设置触发时间factory.setCronExpression("0/2 * * * * ?");return factory;}这个是Cron Trigger,我们还是提供一个bean注解,然后在里面加一个方法,现在返回的就是一个CronTriggerFactoryBean,这个是比较简单的,方法名还是叫cronTriggerFactoryBean,然后在这个方法里仍然需要一个jobDetailFactoryBean,那么在这个方法里肯定是需要一个CronTriggerFactoryBean的,然后这里肯定是返回factory,然后我们还是要设置job的关联,关联Job对象,然后设置一个时间,怎么设置呢,factory.setJobDetail(jobDetailFactoryBean.getObject()),然后还是设置触发时间,这里通过setCronExpression,cron的表达式,那么我还是让他每两秒去执行一次,@Beanpublic SchedulerFactoryBean schedulerFactoryBean(CronTriggerFactoryBean cronTriggerFactoryBean){SchedulerFactoryBean factory = new SchedulerFactoryBean();//关联triggerfactory.setTriggers(cronTriggerFactoryBean.getObject());return factory;}我们看一下,每两秒,没有问题,第一次他隔了一秒,其实它第一次计时的时候,第一次时间和第二次时间多多少少有些误差,但是问题不大,以上就是SpringBoot整合Quartz的一个实现,还是比较简单的

<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance" xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.learn</groupId><artifactId>spring-boot-quartz</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.12.RELEASE</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><!-- springBoot的启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 添加Scheduled坐标 --><!-- <dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency> --><!-- Quartz坐标 --><!-- <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version></dependency> --><!-- Quartz坐标 --><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version><exclusions><exclusion><artifactId>slf4j-api</artifactId><groupId>org.slf4j</groupId></exclusion></exclusions></dependency><!-- 添加Scheduled坐标 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId></dependency><!-- Sprng tx 坐标 --><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId></dependency></dependencies></project>

package com.learn.config;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.quartz.CronTriggerFactoryBean;import org.springframework.scheduling.quartz.JobDetailFactoryBean;import org.springframework.scheduling.quartz.SchedulerFactoryBean;import com.learn.quartz.QuartzDemo2;/*** Quartz配置类* @author Leon.Sun**/@Configurationpublic class QuartzConfig {/*** 1.创建Job对象*/@Beanpublic JobDetailFactoryBean jobDetailFactoryBean(){JobDetailFactoryBean factory = new JobDetailFactoryBean();//关联我们自己的Job类factory.setJobClass(QuartzDemo2.class);return factory;}/*** 2.创建Trigger对象* 简单的Trigger*///@Bean//public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){//SimpleTriggerFactoryBean factory = new SimpleTriggerFactoryBean();////关联JobDetail对象//factory.setJobDetail(jobDetailFactoryBean.getObject());////该参数表示一个执行的毫秒数//factory.setRepeatInterval(2000);////重复次数//factory.setRepeatCount(5);//return factory;//}/*** Cron Trigger*/@Beanpublic CronTriggerFactoryBean cronTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){CronTriggerFactoryBean factory = new CronTriggerFactoryBean();factory.setJobDetail(jobDetailFactoryBean.getObject());//设置触发时间factory.setCronExpression("0/2 * * * * ?");return factory;}//@Bean//public SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean){//SchedulerFactoryBean factory = new SchedulerFactoryBean();////关联trigger//factory.setTriggers(simpleTriggerFactoryBean.getObject());////return factory;//}/*** 3.创建Scheduler对象*/@Beanpublic SchedulerFactoryBean schedulerFactoryBean(CronTriggerFactoryBean cronTriggerFactoryBean){SchedulerFactoryBean factory = new SchedulerFactoryBean();//关联triggerfactory.setTriggers(cronTriggerFactoryBean.getObject());return factory;}}

package com.learn;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.scheduling.annotation.EnableScheduling;/*** *spring Boot 整合Quartz案例**/@SpringBootApplication@EnableSchedulingpublic class QuartzApp {public static void main(String[] args) {SpringApplication.run(QuartzApp.class, args);}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。