Spring Task简介
定时任务
在开发的过程中,我们可能会定时去处理一些问题,例如数据库的备份,定时开启某个服务等,我们不可能很准时的开启或关闭这些服务,因此我们需要一个定时任务管理器来替我们管理这些任务,下面是定时任务的入门的一些学习记录,仅供大家参考,如果你是大佬,请指出其中的不妥。
实现方式(三种)
java自带的API
java.util.Timer
java.util.TimerTask
Quartz框架
开源工具 功能强大 使用起来稍显复杂
Spring 3.0 Task
Spring 3.0
以后自带了task调度工具,比Quartz更加简单方便
开发环境准备
创建JavaWeb项目,使用maven
引入相关jar包
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.13.RELEASE</version>
</dependency>
</dependencies>
基本的配置
配置web.xml
<!--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>
如何使用SpringTask
纯xml配置方式
1.简单定时任务
- 实现业务功能+配置定时规则
<bean id="taskService" class="com.lxk.service.TaskServiceImpl"></bean>
<!--xml配置定时任务方式的复杂方式-->
<!--initial-delay :设置服务器启动多少毫秒后-->
<!--fixed-delay: 每隔多少毫秒运行一次定时任务-->
<task:scheduled-tasks>
<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>
2.复杂定时任务
corn(七子表达式)
<bean id="taskService" class="com.lxk.service.TaskServiceImpl"></bean>
<!--xml配置定时任务方式的复杂方式-->
<task:scheduled-tasks>
<task:scheduled ref="taskService" method="FirstTask" cron="*/5 * * * * ?"/>
<task:scheduled ref="taskService" method="SecondTask" cron="0 45 15 * * ?"/>
</task:scheduled-tasks>
全注解方式
<!--注解的简单写法-->
@Scheduled(initialDelay = 1000,fixedDelay = 1000)
public void FirstTask() {
System.out.println(new Date() + "第一个任务");
}
<!--注解的复杂写法:每天的15:45执行-->
@Scheduled(cron = "0 45 15 * * ?")
public void SecondTask() {
System.out.println(new Date() + "第二个任务");
}
SpringBoot中使用
首先在pom.xml中引入相关依赖,这里我就不一一列出来了,有需要的可以参考前面的SpringBoot文章中的依赖引入
@Component
public class MyTask {
@Scheduled(initialDelay = 1000,fixedDelay = 1000)
public void firstTask(){
System.out.println("MyTask:"+new Date()+"这是第一个任务");
}
@Scheduled(cron = "*/5 * * * * ?")
public void secondTask(){
System.out.println("MyTask:"+new Date()+"这是第二个任务");
}
}
SpringBoot启动类,没有学过SpringBoot的可以查看我前面的文章,有很详细的入门教程
@EnableAutoConfiguration
@ComponentScan(basePackages = "com.lxk.service")
@EnableScheduling
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}