1. task与Quartz区别
Spring从3.0开始增加了自己的任务调度器,它是通过扩展java.util.concurrent包下面的类来实现的,它也使用Cron表达式。
对于Quartz,我们使用的时候主要是注重两个方面,一个是定时任务的业务,另一个就是Cron表达式。定时任务跟具体的业务相关,这无需多说,这里只说明表达式含义及其写法。
简单的来说task是Quartz的轻量级封装。task不需要而外引入jar包,完全依赖与spring 相关jar.
2. task有两种配置方式,一种是依赖配置文件,第二种是注解实现;
1.第一种方式大家可以参考一下其他的,主要讲解第二种配置方式,因为比较简介,迅速;
2.第二种方式:可以直接在spring配置文件中增加命名空间task ;
`<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: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-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">`
3. 第二步 :
`
<context:component-scan base-package="com.meyacom" />
<task:annotation-driven executor="executor"
scheduler="scheduler"/>`
<context:component-scan base-package="com.meyacom" />
<task:scheduler id="scheduler" pool-size="${task.core_pool_size}" />
<task:annotation-driven executor="taskExecutor"
scheduler="scheduler" />
<bean id="taskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="${task.core_pool_size}" />
<property name="maxPoolSize" value="${task.max_pool_size}" />
<property name="queueCapacity" value="${task.queue_capacity}" />
<property name="keepAliveSeconds" value="${task.keep_alive_seconds}"
/>
</bean>
第3步:task 数据,配置在jdbc.properties中
#------------ Task ------------
task.core_pool_size=10
task.max_pool_size=50
task.queue_capacity=1000
task.keep_alive_seconds=60
第四步 :编写测试方法
@Service
@Component
public class TaskServiceImpl implements TaskService{
@Scheduled(cron="0/5 * * * * ? ")
@Override
public void myTest() {
System.out.println(Thread.currentThread().getThreadGroup()+" "+Thread.currentThread().getName()+" "+"定时任务一:mytest1--------------------------开始");
}
@Scheduled(cron="0/5 * * * * ? ")
@Override
public void myTest2() {
System.out.println(Thread.currentThread().getName()+" "+"定时任务二:mytest2--------------------------开始");
}
@Scheduled(cron="0/5 * * * * ? ")
@Override
public void myTest3() {
System.out.println(Thread.currentThread().getName()+" "+"定时任务三:mytest3--------------------------开始");
}
}
第五步:测试结果 ##
java.lang.ThreadGroup[name=main,maxpri=10] scheduler-3 定时任务一:mytest1
scheduler-1 定时任务二:mytest2
java.lang.ThreadGroup[name=main,maxpri=10] scheduler-6 定时任务一:mytest1
scheduler-4 定时任务三:mytest3
java.lang.ThreadGroup[name=main,maxpri=10] scheduler-4 定时任务一:mytest1
scheduler-3 定时任务三:mytest3
scheduler-2 定时任务二:mytest2
scheduler-10 定时任务二:mytest2
java.lang.ThreadGroup[name=main,maxpri=10] scheduler-6 定时任务一:mytest1
scheduler-9 定时任务三:mytest3