定时任务使用的方法
1.最原始的使用java提供的延迟循环队列.
2.使用Quartz提供的方法.
3.使用spring提供的调度器.
使用循环延迟队列.
1 | ScheduledExecutorService executorService = Executors.newScheduledThreadPool(10); |
使用Quartz调度
1.引入依赖或者Jar包1
2
3
4
5
6<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
2.配置执行参数1
2
3
4
5
6
7
8<!--配置启动的bean,task以及执行的方法-->
<bean id="job" class=" xx.xx.xx.Job" />
<bean id="cronTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="job" />
<property name="targetMethod" value="runWork" />
<!-- false表示job不会并发执行,默认为true-->
<property name="concurrent" value="false" />
</bean>
2.接下来配置触发器1
2
3
4
5<bean id="doWork" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="cronTask" />
<!—每天凌晨0点1分执行-->
<property name="cronExpression" value="0 01 00 * * ?" />
</bean>
3.最后配置调度工厂1
2
3
4
5
6
7
8<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!--调度多个任务-->
<ref local="doWork"/>
</list>
</property>
</bean>
使用spring task来调度
1.添加相应的命名空间1
2
3
4
5
6<beans xmlns="http://www.springframework.org/schema/beans"
......
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.0.xsd">
2.task 线程池配置1
2
3<task:executor id="executor" pool-size="5" />
<task:scheduler id="scheduler" pool-size="5" />
<task:annotation-driven executor="executor" scheduler="scheduler" />
3.task配置,以及调度时间配置1
2
3
4<bean name = "myTask" class = "xxx.xxx.MyTask" />
<task:scheduled-tasks scheduler="reportTaskScheduler" >
<task:scheduled ref="myTask" method="doTask" cron="0/5 * * * * ?" />
</task:scheduled-tasks>
总结
1.方法一如果要采用Spring来启动的话.就需要实现Spring的初始化Bean的接口(InitializingBean).在初始化之后,调用该任务的延迟队列.
2.Quartz与Spring的 Task的区别是一个可以异步,一个只能同步.
3.Spring 与Quartz的时间配置都是采用cron表达式.
附录Cron表达式
1 | “0/10 * * * * ?” 每10秒触发 |