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

开发 架构
SpringTask是Spring自带的轻量级定时任务工具,相比于Quartz使用更加简单方便,并且不需要不需要引入其他依赖即可使用。

 [[408224]]

今天给大家介绍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. <dependency> 
  2. <groupId>org.springframework.boot</groupId> 
  3. <artifactId>spring-boot-starter-quartz</artifactId> 
  4. </dependency> 

 

添加测试类 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.      * 定时任务1: 
  24.      * Trigger触发器使用 
  25.      */ 
  26.     @Bean 
  27.     public Trigger testJobTrigger() { 
  28. //每隔5秒执行一次 
  29.         CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/15 * * * * ?"); 
  30. //创建触发器 
  31.         Trigger trigger = TriggerBuilder.newTrigger() 
  32.                 .forJob(testJobDetail())//关联上述的JobDetail 
  33.                 .withSchedule(cronScheduleBuilder) 
  34.                 .build(); 
  35. return trigger
  36.     } 
  37.  
  38. @Bean 
  39.     public JobDetail testSampleJobDetail() { 
  40.         JobDetail jobDetail= JobBuilder.newJob(QuartzJobTest.class) 
  41.                 .usingJobData("type","SimpleTrigger"
  42.                 .usingJobData("userName""小王")               .storeDurably()  
  43.                 .build(); 
  44. return jobDetail; 
  45.     } 
  46.  
  47. /** 
  48.      * 定时任务2: 
  49.      * Simple触发器使用 
  50.      * */ 
  51.     @Bean 
  52.     public SimpleTrigger testSimpleTrigger(){ 
  53.         SimpleScheduleBuilder ssb = SimpleScheduleBuilder.simpleSchedule() 
  54.                 .withIntervalInSeconds(10).repeatForever(); 
  55.         SimpleTrigger sTrigger = TriggerBuilder.newTrigger() 
  56.                 .forJob(testSampleJobDetail())// 
  57.                 .withSchedule(ssb).build(); 
  58. return sTrigger; 
  59.     } 
  60.  
  61.  

运行效果

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技术分享社区
相关推荐

2024-09-20 05:49:04

SpringBoot后端

2020-12-21 07:31:23

实现单机JDK

2024-05-31 13:07:29

.NET Core定时任务编程

2009-06-15 15:02:48

Spring定时器

2019-02-20 15:52:50

技术开发代码

2024-01-22 08:53:00

策略任务RocketMQ

2021-08-05 07:28:25

Java实现方式

2019-12-25 15:10:00

MySQL事件数据库

2024-02-26 11:12:33

定时任务线程

2024-01-31 08:38:57

Python定时任务函数

2021-11-22 12:35:40

Python命令定时任务

2024-10-15 16:41:35

2024-02-28 09:54:07

线程池配置

2021-12-08 10:47:35

RabbitMQ 实现延迟

2010-07-14 10:30:26

Perl多线程

2023-12-19 08:09:06

Python定时任务Cron表达式

2022-06-08 15:12:34

前端前端截图

2016-12-27 19:29:14

Linux命令定时任务

2024-11-04 16:01:01

2023-10-31 12:42:00

Spring动态增删启停
点赞
收藏

51CTO技术栈公众号