springboot2.x集成quartz实战
本章是基于springboot2.x版本下的开发环境
-
首先在项目的pom文件中引入springboot 官方集成 quartz的jar包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency>
-
成功引入依赖后,就是配置生成SchedulerFactoryBean的相关配置信息,我们采用数据库的方式来保存我们的job,trigger等信息。相关配置信息如下:
spring: quartz: #相关属性配置 properties: org: quartz: scheduler: instanceName: clusteredScheduler instanceId: AUTO jobStore: class: org.quartz.impl.jdbcjobstore.JobStoreTX driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate tablePrefix: QRTZ_ isClustered: true clusterCheckinInterval: 10000 useProperties: false threadPool: class: org.quartz.simpl.SimpleThreadPool threadCount: 5 threadPriority: 5 threadsInheritContextClassLoaderOfInitializingThread: true #数据库方式 job-store-type: jdbc overwrite-existing-jobs: true #每次启动后都会覆盖数据之前的job信息,默认false,这时配置的cron expression 不会同步到数据库
-
配置信息配好,并且数据库表创建成功后(相关表可以到quartz官方下载)我们quartz的开发环境就已经成功完成了。接下来就是小伙伴们撸代码的时候了。。。
-
首先我们先创建一个job类,这个类看名字就知道是干活的,主要用来执行我们的具体的业务逻辑的
public class MyJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { System.out.println("我开始干活啦"); } }
-
job的业务逻辑完成后,我们需要指定该job的执行时间,我们使用cron表达式。quartz提供触发器机制去绑定一个jobdetail,当当前时间符合我们配置的cron表达式时,该触发器就会被出发,并执行具体的job, 具体的创建方式如下:
@Bean public JobDetail createMyJobDetail() { returnJobBuilder.newJob(MyJob.class).withIdentity("myJob").storeDurably() .build(); } @Bean public Trigger createMyJobTrigger() { return TriggerBuilder.newTrigger().forJob(createMyJobDetail()).withIdentity("myJob"). withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?"). withMisfireHandlingInstructionFireAndProceed()).build(); }
-
OK, 以上就是一个job的全部开发流程,当springboot启动时SchedulerFactoryBean会将我们创建的job和trigger注册到scheduler上。
如果解决了小伙伴的问题,请点个赞吧!