当前位置: 首页 > 科技观察

SpringBoot定时任务的两种实现方法

时间:2023-03-20 12:41:34 科技观察

今天给大家介绍几种SpringBoot定时任务的实现方法。希望对您有所帮助!一、SpringTask使用框架介绍:SpringTask是Spring自带的轻量级定时任务工具,使用起来比Quartz更简单方便,无需引入其他依赖即可使用。今天主要介绍注解的实现:SpringBoot启动类配置@EnableScheduling注解包my.springboot.task;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.scheduling.annotation.EnableScheduling;@SpringBootApplication@EnableSchedulingpublicclassTaskApplication{publicstaticvoidmain(String[]args){SpringApplication.run(TaskApplication.class,args);}}创建测试类TaskTest.javapackagemy.springboot.task.controller;importcn.hutool.core.date.DateUtil;importorg.springframework.scheduling.annotation.Scheduled;importorg.springframework.stereotype.Component;importjava.util.Date;@ComponentpublicclassTaskTest{//每20秒执行一次@Scheduled(cron="0/20****?")publicvoidTest(){System.out.println("Executethetest"+DateUtil.now());}}然后启动项目,运行效果如下:2.Quartz使用介绍添加依赖org.弹簧框架.bootspring-boot-starter-quartz添加测试类QuartzJobTest.javapackagemy.springboot.mybatis.controller;importcn.hutool.core.date.DateUtil;importorg.quartz.JobExecutionContext;importorg.quartz.JobExecutionException;importorg.springframework.scheduling.quartz.QuartzJobBean;publicclassQuartzJob@JobTestextBean{OverrideprotectedvoidexecuteInternal(JobExecutionContextjobExecutionContext)throwsJobExecutionException{StringuserName=(String)jobExecutionContext.getJobDetail().getJobDataMap().get("userName");Stringtype=(String)jobExecutionContext.getJobDetail().getJobDataMap().get("类型");System.out.println("测试类类型:"+type+",你好,"+userName+",当前执行时间为:"+DateUtil.now());}}添加配置类QuartzConfig.javapackagemy.springboot.mybatis.常见的;importmy.springboot.mybatis.controller.QuartzJobTest;importmy.springboot.mybatis.controller.TaskTest;importorg.quartz.*;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassQuartzConfig{@BeanpublicJobDetailtestJobDetail(){JobDetailjobDetail=JobBuilder.newJob(QuartzJobTest.class).usingJobData("type","Trigger").usingJobData("userName","小明")//设置参数(keyvaluepair).storeDurably().build();returnjobDetail;}/***定时任务1:*Trigger触发使用*/@BeanpublicTriggertestJobTrigger(){//每5秒执行一次CronScheduleBuildercronScheduleBuilder=CronScheduleBuilder.cronSchedule("0/15****?");//创建触发器Triggertrigger=TriggerBuilder.newTrigger().forJob(testJobDetail())//关联上面的JobDetail.withSchedule(cronScheduleBuilder).build();returntrigger;}@BeanpublicJobDetailtestSampleJobDetail(){JobDetailjobDetail=JobBuilder.newJob(QuartzJobTest.class).usingJobData("type","SimpleTrigger").usingJobData("userName","小王").storeDurably().build();returnjobDetail;}/***定时任务2:*简单触发器使用**/@BeanpublicSimpleTriggertestSimpleTrigger(){SimpleScheduleBuilderssb=SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(10).repeatForever();SimpleTriggersTrigger=TriggerBuilder.newTrigger().forJob(testSampleJobDetail())//.withSchedule(ssb).build();returnsTrigger;}}运行效果3.常用使用Cron表达式“0013、16、17**?”每天下午1点、4点、7点执行一次"0010?*WED"表示每周三上午10:00执行一次"0010**?"每天上午10:00执行一次“01513**?”每天下午1:15执行一次“01510**?”每天上午10:15执行一次“03010**?2021”2021年每天上午10:30执行一次“0109?*MON-FRI”周一至周五上午9:10执行“0151015*?”;每月15号上午10点15分执行"01510L*?""01510L*?"每月最后一个星期五上午10点15分执行一次"/5****?"每5秒执行一次"0*/1***?"每1分钟执行一次"0023**?"每天23每天凌晨1点执行一次"001**?""0011*?"每天凌晨1点执行一次"0023L*?"每月最后一天23:00执行一次"001?*L"每周星期日凌晨1:00执行"026,29,33***?";执行"000,13,18、21**?”每天0:00、13:00、18:00、26、29、33分钟,21:00执行一次转载本文请联系IT技术分享社区公众号。个人博客站点:https://programmerblog.xyz