在实际项目开发中,难免会遇到定时执行任务的场景;比方说,每隔多少时间需要做什么事情;每隔月的几号定时做什么事情;像这样的业务需求,会经常遇到;那么怎么去实现这样的业务需求呢。刚好最近使用spring Boot开发项目,我就以Spring Boot为例简述:
翻阅了下Spring Boot中有现成的定时注解使用,先来Code:
实现目标是:每隔10秒定时执行
/**
* 定时任务
* @author Alan
* 2016-07-19
*/
@Component
@EnableScheduling
public class ScheduledTask {
/**
* 目标:实现定时任务;实例中是每隔3秒钟执行一次
*/
private Integer count_first = 1;
private Integer count_second = 1;
private Integer count_three = 1;
@Scheduled(fixedRate = 10000)
public void printCurrentTime() throws InterruptedException {
System.out.println(String.format("① 第%s次执行,当前时间为:%s", count_first++, dateFormat.format(new Date())));
}
@Scheduled(fixedDelay = 10000)
public void printCurrentTimeAfterSleep() throws InterruptedException {
System.out.println(String.format("② 第%s次执行,当前时间为:%s", count_second++, dateFormat.format(new Date())));
}
@Scheduled(cron = "*/10 * * * * *")
public void printCurrentTimeCron() throws InterruptedException {
System.out.println(String.format("③ 第%s次执行,当前时间为:%s", count_three++, dateFormat.format(new Date())));
}
private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
1.Spring Boot 实现就是这么简洁,其中:
@Scheduled添加在所要定时执行的方法上
@Component和@EnableScheduling:标注启动定时任务
不难发现@Scheduled中的表达式不同,但是实现同样的功能
1)fixedRate = 10000表示每隔10000ms,Spring scheduling会调用一次该方法,不论该方法的执行时间是多少
2)fixedDelay = 10000表示当方法执行完毕10000后,Spring scheduling会再次调用该方法
3)cron = “/10 * * * * *”提供了一种通用的定时任务表达式,这里表示每隔10秒执行一次,更加详细的信息可以参考cron表达式。
2.cron表达式(摘取)
介绍一个cron Expression 表达式。
这一部分是摘抄的:
秒 | 0-59 | , - * / |
分 | 0-59 | , - * / |
小时 | 0-23 | , - * / |
日期 | 1-31 | , - * / L W C |
月份 | 1-12 或者 JAN-DEC | , - * / |
星期 | 1-7 或者 SUN-SAT | , - * / L C # |
年(可选) | 留空, 1970-2099 | , - * / |
如上面的表达式所示:
“”字符被用来指定所有的值。如:”“在分钟的字段域里表示“每分钟”。
“-”字符被用来指定一个范围。如:“10-12”在小时域意味着“10点、11点、12点”。
“,”字符被用来指定另外的值。如:“MON,WED,FRI”在星期域里表示”星期一、星期三、星期五”.
“?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。当你需要通过在这两个域中的一个来指定一些东西的时候,它是有用的。看下面的例子你就会明白。
“L”字符指定在月或者星期中的某天(最后一天)。即“Last ”的缩写。但是在星期和月中“L”表示不同的意思,如:在月子段中“L”指月份的最后一天-1月31日,2月28日,如果在星期字段中则简单的表示为“7”或者“SAT”。如果在星期字段中在某个value值得后面,则表示“某月的最后一个星期value”,如“6L”表示某月的最后一个星期五。
“W”字符只能用在月份字段中,该字段指定了离指定日期最近的那个星期日。
“#”字符只能用在星期字段,该字段指定了第几个星期value在某月中
每一个元素都可以显式地规定一个值(如6),一个区间(如9-12),一个列表(如9,11,13)或一个通配符(如*)。“月份中的日期”和“星期中的日期”这两个元素是互斥的,因此应该通过设置一个问号(?)来表明你不想设置的那个字段。表7.1中显示了一些cron表达式的例子和它们的意义:
“0 0 12 * * ?” | 每天中午12点触发 |
“0 15 10 ? * *” | 每天上午10:15触发 |
“0 15 10 * * ?” | 每天上午10:15触发 |
“0 15 10 * * ? *” | 每天上午10:15触发 |
“0 15 10 * * ? 2005” | 2005年的每天上午10:15 触发 |
“0 * 14 * * ?” | 在每天下午2点到下午2:59期间的每1分钟触发 |
“0 0/5 14 * * ?” | 在每天下午2点到下午2:55期间的每5分钟触发 |
“0 0/5 14,18 * * ?” | 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 |
“0 0-5 14 * * ?” | 在每天下午2点到下午2:05期间的每1分钟触发 |
“0 10,44 14 ? 3 WED” | 每年三月的星期三的下午2:10和2:44触发 |
“0 15 10 ? * MON-FRI” | 周一至周五的上午10:15触发 |
“0 15 10 15 * ?” | 每月15日上午10:15触发 |
“0 15 10 L * ?” | 每月最后一日的上午10:15触发 |
“0 15 10 ? * 6L” | 每月的最后一个星期五上午10:15触发 |
“0 15 10 ? * 6L 2002-2005” | 2002年至2005年的每月的最后一个星期五上午10:15触发 |
“0 15 10 ? * 6#3” | 每月的第三个星期五上午10:15触发 |
0 6 * * * | 每天早上6点 |
0 /2 * * | 每两个小时 |
0 23-7/2,8 * * * | 晚上11点到早上8点之间每两个小时,早上八点 |
0 11 4 * 1-3 | 每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 |
0 4 1 1 * | 1月1日早上4点 |
3.quartz实现定时任务
quartz中的触发器,设计某个时候触发执行
使用的话,在Spring Boot 添加maven依赖包
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
再后续章节中会对tbschedule做实例
相关推荐
在 Spring Boot 中实现定时任务非常简单,只需要使用两个注解:`@EnableScheduling` 和 `@Scheduled`。在启动类中添加 `@EnableScheduling` 注解,然后在需要定时的方法上添加 `@Scheduled` 注解,并指定 cron ...
计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习参考资料计算机技术、IT咨询、人工智能AI理论介绍,学习...
Spring Boot提供了Spring Scheduler抽象来实现这样的需求,使得开发者能够方便地管理和控制定时任务。本篇文章将深入探讨如何在Spring Boot中实现定时任务的动态开启和关闭。 首先,我们需要引入Spring Boot的`...
本文将深入探讨如何在Spring Boot中实现动态配置定时任务,并实现不重启项目就能开关或重启任务以及改变任务定时规则的功能。 首先,我们需要在Spring Boot的配置文件`application.properties`或`application.yml`...
**一、Spring Boot定时任务** 1. **@Scheduled注解**:Spring Boot提供了对定时任务的支持,主要通过`@Scheduled`注解来实现。该注解可以放在方法上,表示这个方法会按照指定的周期执行。例如: ```java @Scheduled...
通过阅读和理解这些源码,你可以更好地了解Spring如何管理和调度定时任务,以及如何根据项目需求选择合适的定时任务实现方式。在chapter13目录下的文件可能包含了这些源码示例,你可以逐一研究,加深对Spring定时...
通过以上步骤,我们便能在IntelliJ IDEA中成功创建一个Spring Boot项目,并实现定时任务的测试。这种集成方式不仅提高了开发效率,也使得项目管理和调试变得更加便捷。在实际开发中,还可以结合其他Spring Boot特性...
- `@Scheduled`: 这是Spring提供的一个注解,用于标记在方法上以实现定时任务。你可以通过`fixedRate`, `cron`等属性来设置执行频率。 - `@EnableScheduling`: 此注解需要添加到配置类上,启用Spring的定时任务...
综上所述,通过Spring Boot、`ThreadPoolTaskScheduler`和反射机制,我们可以实现一套完整的动态定时任务管理系统。用户可以根据需要添加、修改任务,并通过Cron表达式来灵活控制任务的执行频率。虽然项目中未包含...
Spring Boot 实现定时任务的动态增删启停详解 在 Spring Boot 项目中,实现定时任务的动态增删启停是非常重要的。传统的方法是使用 Quartz 框架,但是这种方法需要依赖其它框架,可能会导致项目的臃肿和复杂。因此...
Spring Boot 创建定时任务(配合数据库动态执行)
本篇文章将详细探讨如何在Spring Boot项目中整合Quartz,并通过MySQL数据库实现定时任务的动态配置。 首先,我们需要在项目中添加依赖。在Spring Boot的`pom.xml`文件中,引入Spring Boot的`spring-boot-starter-...
在Spring框架中,定时任务是通过Spring的Task模块来实现的,这使得在非Web项目中也能方便地进行定时任务的调度。以下是对这个主题的详细讲解。 首先,我们需要了解Spring Task的核心组件: 1. **...
Spring boot开启定时任务的三种方式 零、前言 第一种也就是最简单的一种:基于注解 (@Scheduled)的方式; 第二种:基于接口 (SchedulingConfigurer); 第三种:基于注解设定多线程定时任务。 一、基于@Scheduled注解...
Spring定时任务的几种实现,欢迎交流!
1.在Spring Boot中,你可以使用@Scheduled注解来创建定时任务。将@Scheduled注解与方法一起使用,指定任务执行的时间表达式。 2.使用Spring的TaskScheduler: Spring提供了TaskScheduler接口和相关实现,用于任务...
Spring提供了多种方式来实现定时任务,包括使用`Quartz`和`Spring Task`(也称为Spring Scheduler)。这篇博客将重点讨论如何使用Spring Task来创建和管理定时任务。 首先,我们需要引入Spring Task的依赖。在Maven...
spring-boot-scheduler:spring boot和定时任务案例 spring-boot-web:web开发综合使用案例 spring-boot-mail:spring boot和邮件服务 spring-boot-mongodb:spring boot和mongodb的使用 spring-boot-multi-mongodb...
### Spring Boot中的@Scheduled注解:定时任务的原理与实现 #### 一、引言 在现代软件开发中,定时任务是一种非常常见的需求。无论是数据同步、定期清理缓存还是发送提醒邮件,都需要应用程序能够在特定的时间点...