定时任务是解决很多问题的常用手段,spring的spring task 可以看做一个轻量级的quartz框架。只需要通过少量的配置,就能启动定时任务。
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webartifactId>
<version>4.3.9.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>4.3.9.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-beansartifactId>
<version>4.3.9.RELEASEversion>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-context-supportartifactId>
<version>4.3.9.RELEASEversion>
dependency>
这几个jar是必需的,其中spring-web,可要可不要,在web容器中加载spring,需要spring-web。
在spring.xml文件中引入xsi校验。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
编写具体的任务实现类,里面指定一个方法,execute(),名字随便起。
package com.springTask;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.stereotype.Component;
@Component
public class TaskTest {
public void execute(){
System.out.println("let's go on " + new SimpleDateFormat().format(new Date()).toString());
}
}
在spring.xml文件中配置
<context:component-scan base-package="com.springTask"/>
<task:scheduled-tasks>
<task:scheduled ref="taskTest" method="execute" cron="0/1 * * * * ?"/>
task:scheduled-tasks>
一般常用的都是cron表达式,去控制定时任务执行的时间。
设置运行的参数还有
一共6个参数,{秒,分,时,天,月,周}
秒:可使用”, - * /”四个字符,使用数字0-59 表示,
分:可使用”, - * /”四个字符,使用数字0-59 表示,
时 :可使用”, - * /”四个字符,使用数字0-23表示,
天:可使用”, - * / ? L W C”八个字符正常情况下,使用数字1-30或1-31。看当前点具体的月份。
month(月) :可使用”, - * /”四个字符,使用数字0-11 或 ”JAN-DEC“。
Day-of-Week(每周):可使用”, - * / ? L C #”四个字符,使用数字1-7 或 ”MON-FR“
具体用法这里推荐一篇博客
cron表达式
也可以是使用在线cron表达式生成器
package com.springTask;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.config.TaskExecutorFactoryBean;
import org.springframework.stereotype.Component;
@Component
public class TaskTest {
@Scheduled(cron="* * * * * ?")
public void execute(){
System.out.println("let's go on " + new SimpleDateFormat().format(new Date()).toString());
}
}
xml文件加载task的注解驱动,spring容器在初始化的时候回去寻找带@scheduled注解的bean。将其加入定时任务的线程池中。
spring.xml只扫描bean
<context:component-scan base-package="com.springTask"/>
package com.springTask;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
@EnableScheduling
public class TaskTest {
@Scheduled(cron="* * * * * ?")
public void execute(){
System.out.println("let's go on " + new SimpleDateFormat().format(new Date()).toString());
}
}
以@EnableScheduling注解。
只要加载spring容器就能启动定时任务了。