当前位置: 首页 > 后端技术 > Java

SpringBoot集成Quartz入门

时间:2023-04-01 17:54:25 Java

前言Quartz是一个完全用Java编写的开源作业调度框架,为Java应用程序中的作业调度提供了一种简单但功能强大的机制。—byW3CschoolQuartz官方文档GettingStarted首先我们需要从Maven中引入spring-boot-starter-quartz-boot-starter-quartzspringboot配置,可选,配置项可以查看官方文档#Quartzspring.quartz.job-store-type=内存spring.quartz.auto-startup=truespring.quartz.overwrite-existing-jobs=truespring.quartz.wait-for-jobs-to-complete-on-shutdown=true然后创建一个新的石英配置类@ConfigurationpublicclassQuartzConfig{@BeanpublicJobDetailjobDetail_1(){returnJobBuilder.newJob(TestJob.class)//执行的class.withIdentity("jobDetail_1").storeDurably().build();}@BeanpublicTriggermyTrigger(){returnTriggerBuilder.newTrigger().forJob("jobDetail_1").withIdentity("myTrigger").startNow().withSchedule(CronScheduleBuilder.cronSchedule("0/3**1*?*"))//任务调度cron表达式,这里以字符串形式传递,后台可以动态配置.build();}}最后就写一个要执行的方法,改类继承QuartzJobBean并实现executeInternal方法,在executeInternal方法中写调度逻辑@Service@AsyncpublicclassTestJobextendsQuartzJobBean{privatefinalLoggerlogger=LoggerFactory.getLogger(TestJob。班级);privatefinalSimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddhh:mm:ss");@OverrideprotectedvoidexecuteInternal(JobExecutionContextcontext){logger.info("定时器执行:"+sdf.format(newDate()));}}踩坑说明,如果上面的方法都写完运行了,但是任务没有执行,控制台也没有报错,这种情况下,很可能是配置文件没有生效。在我的例子中,配置类没有被springboot扫描,所以我的解决方法如下:@EnableAsync@EnableScheduling@SpringBootApplication(scanBasePackages="com.jwss")publicclassApplication{publicstaticvoidmain(String[]args){SpringApplication.run(Application.class,args);}}主要是加这个让它扫描我项目的所有代码scanBasePackages="com.jwss"