声明XML模式(xsd)文件
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation=
"http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.2.xsd"
我用的是spring的3.2版本
组件扫描
<context:component-scan base-package="com.XXX" />
就是要让spring知道初始化的时候要扫描哪些包,你的计划任务需要在包中,否则spring找不到
注入定时任务
<task:annotation-driven/>
<task:scheduler id="testTask" pool-size="3" />
<task:scheduled-tasks scheduler="testTask">
<task:scheduled ref="solrTask" method="excute" cron="0/8 * * * * ?" />
</task:scheduled-tasks>
参数解释:
annotation-driven 帮助我们完成task的注册
pool-size 调度线程池的大小,调度线程在被调度任务完成前不会空闲
ref 它会告诉Spring 正在装配的是一个bean的引用,这个bean的名字是 solrTask,对应我们定义组件的id
method 需要运行bean中的方法
cron 定义定时任务的启动规则(本例启动为每8秒运行一次)
定时任务类
package com.xxx;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component("solrTask")
public class SolrTask {
public void excute() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
System.out.println("定时测试"+df.format(new Date()));
}
}
流程说明:运行程序后,spring先进行组件扫描,获取id为solrTask的bean,然后进行定时任务的注入,对定时任务的配置等操作。
运行结果:
建议:如果有条件,在进行Spring配置时最好选用JavaConfig进行配置,而不是选择XML配置。第一JavaConfig本就是java程序,会和项目很融合,而且JavaConfig的功能更为强大,配置更为简单而且配置出错率也比较低。XML还是用于维护既有的老项目比适合~~~