一.spring Task 简介
spring 3.0以后自带了task调度工具
二.环境准备
1.jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
三.spring Task XML配置方式开发
1.实现一个简单的定时任务
- 实现业务功能
package com.neusoft.service.impl;
import com.neusoft.service.TaskService;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class TaskServiceImpl implements TaskService {
@Override
public void firstTask() {
System.out.println(new Date() + "这是第一个定时任务");
}
@Override
public void secondTask() {
System.out.println(new Date() + "这是第二个定时任务");
}
}
- 配置定时任务
在spring配置文件 applicationContext.xml 中 增加如下内容,同时还要增加 task 约束
<!-- 配置定时规则 -->
<task:scheduled-tasks>
<!--
可以配置多个定时任务
ref:指定 要执行的 方法在哪个bean中
method:指定 要执行的方法
initial-delay:设置web服务器启动后,要等多少毫秒开始执行定时任务
fixed-delay:设定每隔多少毫秒执行一次定时任务
-->
<task:scheduled ref="taskServiceImpl" method="firstTask" initial-delay="1000" fixed-delay="1000" />
<task:scheduled ref="taskServiceImpl" method="secondTask" initial-delay="2000" fixed-delay="3000"/>
</task:scheduled-tasks>
2.实现一个复杂的定时任务
(1)cron表达式
cron表达式是一个字符串,用来定义复杂的定时规则,由七部分组成,每部分中间用空格隔开
corn从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份
(2)各字段的含义
(3)另外,cron表达式还可以包含一些特殊符号来定义更加灵活的定时规则
(4)demo
spring配置文件 applicationContext.xml
<!-- 配置定时规则 -->
<task:scheduled-tasks>
<!--
可以配置多个定时任务
ref:指定 要执行的 方法在哪个bean中
method:指定 要执行的方法
initial-delay:设置web服务器启动后,要等多少毫秒开始执行定时任务
fixed-delay:设定每隔多少毫秒执行一次定时任务
cron:指定cron表达式
-->
<task:scheduled ref="taskServiceImpl" method="firstTask" cron="*/5 * * * * ?"/>
<task:scheduled ref="taskServiceImpl" method="secondTask" cron="0 23 16 * * ?"/>
</task:scheduled-tasks>
四.spring Task 全注解方式开发
1.applicationContext.xml 配置
<context:component-scan base-package="com.neusoft"/>
<!--开启对 @Scheduled 注解的支持-->
<task:annotation-driven/>
2.定时任务类中添加注解
package com.neusoft.service.impl;
import com.neusoft.service.TaskService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class TaskServiceImpl implements TaskService {
/**
* 在方法上加 @Scheduled 注解
* initial-delay:设置web服务器启动后,要等多少毫秒开始执行定时任务
* fixed-delay:设定每隔多少毫秒执行一次定时任务
* cron:指定cron表达式
*/
@Scheduled(initialDelay = 1000, fixedDelay = 1000)
@Override
public void firstTask() {
System.out.println(new Date() + "这是第一个定时任务");
}
@Override
public void secondTask() {
System.out.println(new Date() + "这是第二个定时任务");
}
}