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); } }