Author: haoranSun
Wechat: SHR—97
一、什么是定时任务:
定时任务是指调度程序在指定的时间或周期触发执行的任务
使用场景:发送邮件、统计、状态修改、消息推送、活动开启、增量索引
二、定时任务实现技术:
- Java自带的java.util.Time类,这个类允许你调度一个java.util.TimerTask任务。使用这种方法可以让你的程序按照某一个频度执行,但不能在指定时间运行。使用较少。
- Spring3.0以后自主开发的定时任务工具Spring task,使用简单,支持线程池,可以高效处理许多不同的定时任务,除Spring相关的包外不需要额外的包,支持注解和配置文件两种形式。不能处理过于复杂的任务。
- 专业的定时任务框架Quartz,功能强大,可以让你的程序在指定时间执行,也可以按照某一个频度执行,支持数据库、监听器、插件、集群。
三、示例
* 1. Timer单线程*
1 | /** |
1 | /** |
* 2. Spring Task4个标签+1个注解*
- 基于配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16/**
* Spring Task 任务类
* Created by haoranSun on 2017/6/24.
*/
public class SpringTask {
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public void m1(){
System.out.println("m1:"+simpleDateFormat.format(new Date()));
}
public void m2(){
System.out.println("m2:"+simpleDateFormat.format(new Date()));
}
public void m3(){
System.out.println("m2:"+simpleDateFormat.format(new Date()));
}
}
1 | <!--spring-task.xml 配置 --> |
- 基于注解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21/**
* Spring Task 任务类
* Created by haoranSun on 2017/6/24.
*/
public class SpringAnnotationTask {
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH: mm:ss");
/* @Scheduled(fixedDelay = 8000)
public void m1(){
System.out.println("m1:"+simpleDateFormat.format(new Date()));
}
@Scheduled(fixedRateString = "5000")
public void m2(){
System.out.println("m2:"+simpleDateFormat.format(new Date()));
}
*/
"0-30 * * * * ?") (cron =
public void m3(){
System.out.println("m2:"+simpleDateFormat.format(new Date()));
}
}
1 | <!-- 开启基于注解的 spring task--> |
* 3. Quartz*
导入lib或者Maven依赖
1
2
3
4
5
6
7
8
9
10<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>核心接口
a. Scheduler 调度器
b. Job 任务
c. Trigger 触发器
d. JobDetail 任务信息Trigger触发器
a. SimpleTrigger // 功能简单 指定时间、周期
b. CronTrigger // 基于cron表达式触发器cron表达式:秒 分 时 日 月 周 年
简单入门
1 | /** |
1 | /** |
- 基于simpleSchedule的定时任务
1 | /** |
- 基于CronSchedule的定时任务
1 | /** |
Quartz和Spring集合
- 依赖
1
2
3
4
5<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring-version}</version>
</dependency>- 任务类继承QuartzJobBean或实现Job接口
1
2
3
4
5
6
7
8/**
* Created by haoranSun on 2017/6/25 0025.
*/
public class SpringQuartz {
public static void main(String[] args) {
new ClassPathXmlApplicationContext("classpath:spring.xml");
}
}- Spring.xml配置
1 | <!--<bean id="user" class="User"></bean>--> |