文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot定时任务实现的两种方式介绍

2024-12-03 03:07

关注

今天给大家介绍SpringBoot定时任务实现的几种方式,希望对大家能有所帮助!

1、SpringTask 用法

框架介绍:SpringTask是Spring自带的轻量级定时任务工具,相比于Quartz使用更加简单方便,并且不需要不需要引入其他依赖即可使用。今天主要介绍注解的实现方式:

SpringBoot启动类配置 @EnableScheduling 注解

  1. package my.springboot.task; 
  2.  
  3. import org.springframework.boot.SpringApplication; 
  4. import org.springframework.boot.autoconfigure.SpringBootApplication; 
  5. import org.springframework.scheduling.annotation.EnableScheduling; 
  6.  
  7. @SpringBootApplication 
  8. @EnableScheduling  
  9. public class TaskApplication { 
  10.  
  11. public static void main(String[] args) { 
  12.         SpringApplication.run(TaskApplication.class, args); 
  13.     } 
  14.  

创建测试类 TaskTest.java

  1. package my.springboot.task.controller; 
  2.  
  3. import cn.hutool.core.date.DateUtil; 
  4. import org.springframework.scheduling.annotation.Scheduled; 
  5. import org.springframework.stereotype.Component; 
  6.  
  7. import java.util.Date
  8. @Component 
  9. public class TaskTest { 
  10. //每隔20秒执行一次 
  11. @Scheduled(cron = "0/20 * * * * ?"
  12. public void Test() 
  13.     { 
  14.         System.out.println("执行测试"+ DateUtil.now()); 
  15.     } 

然后启动项目就可以了,运行效果如下:

2、Quartz用法 介绍

添加依赖

  1.  
  2. org.springframework.boot 
  3. spring-boot-starter-quartz 
  4.  

 

添加测试类 QuartzJobTest.java

  1. package my.springboot.mybatis.controller; 
  2.  
  3. import cn.hutool.core.date.DateUtil; 
  4. import org.quartz.JobExecutionContext; 
  5. import org.quartz.JobExecutionException; 
  6. import org.springframework.scheduling.quartz.QuartzJobBean; 
  7.  
  8. public class QuartzJobTest extends QuartzJobBean { 
  9. @Override 
  10.     protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { 
  11.         String userName = (String) jobExecutionContext.getJobDetail().getJobDataMap().get("userName"); 
  12.         String type = (String) jobExecutionContext.getJobDetail().getJobDataMap().get("type"); 
  13.         System.out.println("测试类型:"+type+",你好,"+userName+",当前执行时间为:"+ DateUtil.now()); 
  14.     } 

添加配置类 QuartzConfig.java

  1. package my.springboot.mybatis.common; 
  2.  
  3. import my.springboot.mybatis.controller.QuartzJobTest; 
  4. import my.springboot.mybatis.controller.TaskTest; 
  5. import org.quartz.*; 
  6. import org.springframework.context.annotation.Bean; 
  7. import org.springframework.context.annotation.Configuration; 
  8.  
  9. @Configuration 
  10. public class QuartzConfig { 
  11.  
  12.  
  13. @Bean 
  14.     public JobDetail testJobDetail() { 
  15.         JobDetail jobDetail= JobBuilder.newJob(QuartzJobTest.class) 
  16.                 .usingJobData("type","Trigger"
  17.                 .usingJobData("userName""小明") //设置参数(键值对) 
  18.                 .storeDurably() 
  19.                 .build(); 
  20. return jobDetail; 
  21.     } 
  22.  
  23.     @Bean 
  24.     public Trigger testJobTrigger() { 
  25. //每隔5秒执行一次 
  26.         CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/15 * * * * ?"); 
  27. //创建触发器 
  28.         Trigger trigger = TriggerBuilder.newTrigger() 
  29.                 .forJob(testJobDetail())//关联上述的JobDetail 
  30.                 .withSchedule(cronScheduleBuilder) 
  31.                 .build(); 
  32. return trigger
  33.     } 
  34.  
  35. @Bean 
  36.     public JobDetail testSampleJobDetail() { 
  37.         JobDetail jobDetail= JobBuilder.newJob(QuartzJobTest.class) 
  38.                 .usingJobData("type","SimpleTrigger"
  39.                 .usingJobData("userName""小王")               .storeDurably()  
  40.                 .build(); 
  41. return jobDetail; 
  42.     } 
  43.  
  44.  
  45.     @Bean 
  46.     public SimpleTrigger testSimpleTrigger(){ 
  47.         SimpleScheduleBuilder ssb = SimpleScheduleBuilder.simpleSchedule() 
  48.                 .withIntervalInSeconds(10).repeatForever(); 
  49.         SimpleTrigger sTrigger = TriggerBuilder.newTrigger() 
  50.                 .forJob(testSampleJobDetail())// 
  51.                 .withSchedule(ssb).build(); 
  52. return sTrigger; 
  53.     } 
  54.  
  55.  

运行效果

3、常用Cron表达式

  1. “0 0 13,16,17 * * ?” 每天下午1、4、7点执行一次 
  2. “0 0 10 ? * WED” 表示每周三中午10点执行一次 
  3. “0 0 10 * * ?” 每天中午10点执行一次 
  4. “0 15 13 * * ?” 每天下午1:15执行一次 
  5. “0 15 10 * * ? " 每天上午10:15执行一次 
  6. “0 30 10 * * ? 2021” 2021年的每天上午10:30执行一次 
  7. “0 10 9 ? * MON-FRI” 周一至周五的上午9:10执行一次 
  8. “0 15 10 15 * ?” 每月15日上午10:15执行一次 
  9. “0 15 10 L * ?” 每月最后一日的上午10:15执行一次 
  10. “0 15 10 ? * 6L” 每月的最后一个星期五上午10:15执行一次 
  11. "/5 * * * * ?” 每隔5秒执行一次 
  12. “0 */1 * * * ?” 每隔1分钟执行一次 
  13. “0 0 23 * * ?” 每天23点执行一次 
  14. “0 0 1 * * ?” 每天凌晨1点执行一次 
  15. “0 0 1 1 * ?” 每月1号凌晨1点执行一次 
  16. “0 0 23 L * ?” 每月最后一天23点执行一次 
  17. “0 0 1 ? * L” 每周星期天凌晨1点实行一次 
  18. “0 26,29,33 * * * ?” 在26分、29分、33分执行一次 
  19. “0 0 0,13,18,21 * * ?” 每天的0点、13点、18点、21点都执行一次 

 本文转载自微信公众号「IT技术分享社区」,可以通过以下二维码关注。转载本文请联系IT技术分享社区公众号。

个人博客网站:https://programmerblog.xyz

 

来源: IT技术分享社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯