在spring中我们有三种不同的定时任务:基于Quartz的定时机制、基于Timer的定时机制、基于Executor的定时机制。
1、基于Quartz的定时任务机制
下面详细解释这个类图中涉及的关键类及其使用场景
1.1. SchedulerFactoryBean
这是Spring中基于Quartz的定时机制入口,只要Spring容器装载了这个类,Quartz定时机制就会启动,并加载定义在这个类中的所有trigger
1.2. CronTriggerBean
实现了Trigger接口,基于Cron表达式的触发器。这种触发器的好处是表达式与linux下的crontab一致,能够满足非常复杂的定时需求,也容易配置
1.3. MethodInvokingJobDetailFactoryBean
Spring提供的一个不错的JobDetail包装工具,能够包装任何bean,并执行类中指定的任何stati或非static的方法,避免强制要求bean去实现某接口或继承某基础类。
Spring配置实例:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean id="jobDetail_1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="TSupeviseServiceImpl" />
</property>
<property name="targetMethod">
<value>processTInterface</value><!-- 处理数据到业务督办表T_Interface中 -->
</property>
</bean>
<bean id="cronTrigger_1" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobDetail_1" />
</property>
<property name="cronExpression">
<value>0 0 10 * * ? *</value><!-- 每天上午10点执行 -->
</property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">