1、定时任务
业务场景:
1) 每天凌晨备份数据
2) 每个月清空一下日志
3) 页面上投放的广告,每个月过期
4) 每三个月清空一下cookie
定时任务:某个功能、业务,需要在规定的时间内,频度、间隔运行
2、三种
1) java自带的API:
java.util.Timer类 定时器类
java.util.TimerTask类 定时任务类
可以实现指定频度间隔运行、不能在指定时间运行
2) Quartz框架 开源 功能强大 使用起来稍显复杂
3) Spirng3.0 以后自带的task调度工具,比Quartz更加简单方便
二、开发环境准备
1) 创建一个javaweb工程 (maven工程)
2) 引入相关就jar包
pom: spring-context spring-web
3) 基本的配置
web.xml 中配置Spring监听器
<web-app> <!-- Spring配置文件位置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- Spring核心监听器 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
接口和实现类:
public interface TaskService { void firstTask(); void secondTask(); } public class TaskServiceImpl implements TaskService { @Override public void firstTask() { System.out.println(new Date()+":这是第一个定时任务"); } @Override public void secondTask() { System.out.println(new Date() + ":这是第二个定时任务"); } }
三、如何使用Spring Task
1) 纯xml配置的方式
a.简单定时任务
实现业务功能+配置定时规则
<bean id="taskService" class="service.TaskServiceImpl"></bean> <!-- 配置定时任务 --> <task:scheduled-tasks> <!-- ref:指定bean method:指定bean中的方法 initial-delay:服务器启动后多长毫秒开始执行 fixed-delay:每隔多少毫秒执行 --> <task:scheduled ref="taskService" method="firstTask" initial-delay="1000" fixed-delay="1000"/> <task:scheduled ref="taskService" method="secondTask" initial-delay="2000" fixed-delay="3000"/> </task:scheduled-tasks>
b.复杂定时任务
corn表达式:
<bean id="taskService" class="service.TaskServiceImpl"></bean> <!-- 配置定时任务 --> <task:scheduled-tasks> <task:scheduled ref="taskService" method="firstTask" cron="*/5 * * * * ?"/> <!-- 每天21点37分执行一次 --> <task:scheduled ref="taskService" method="secondTask" cron="0 37 21 * * ?"/> </task:scheduled-tasks>
2)全注解的方式
a. 在业务方法上提供注解
b. 开启注解支持
实现类:
@Service public class TaskServiceImpl implements TaskService { // @Scheduled(initialDelay=1000, fixedDelay=1000) @Scheduled(cron="*/5 * * * * ?") @Override public void firstTask() { System.out.println(new Date()+":这是第1个定时任务"); } // @Scheduled(initialDelay=2000, fixedDelay=3000) @Scheduled(cron="* 7 22 * * ?") @Override public void secondTask() { System.out.println(new Date() + ":这是第2个定时任务"); } }
applicationContext.xml
<!-- 扫描注解包路径 --> <context:component-scan base-package="service"></context:component-scan> <!-- 开启对@Scheduled注解的支持 --> <task:annotation-driven/>
四、在SpringBoot中实现定时任务
@Component public class MyTask { // @Scheduled(initialDelay=1000, fixedDelay=1000) @Scheduled(cron="*/5 * * * * ?") public void firstTask() { System.out.println(new Date()+":这是第1个定时任务"); } // @Scheduled(initialDelay=2000, fixedDelay=3000) @Scheduled(cron="* 25 23 * * ?") public void secondTask() { System.out.println(new Date() + ":这是第2个定时任务"); } }
@SpringBootApplication @EnableScheduling public class SpringBookTaskApplication { public static void main(String[] args) { SpringApplication.run(SpringBookTaskApplication.class, args); } }