Spring Quartz 和 Spring Task执行时间对比: 1. Quartz设置同步模式时:一个任务的两次执行的时间间隔是:“执行时间”和“trigger的设定间隔”的最大值 2. Task默认同步模式:一个任务的两次执行的时间间隔是:“执行时间”+“trigger的设定间隔”,即一个任务完成执行后,才开始trigger计时 精确度和功能 Quartz可以通过cron表达式精确到特定时间执行,而TimerTask不能。 Quartz拥有TimerTask所有的功能,而TimerTask则没有。 任务类的数量 Quartz每次执行都创建一个新的任务类对象。 TimerTask则每次使用同一个任务类对象。 对异常的处理 Quartz的某次执行任务过程中抛出异常,不影响下一次任务的执行,当下一次执行时间到来时,定时器会再次执行任务。 TimerTask不同,一旦某个任务在执行过程中抛出异常,则整个定时器生命周期就结束,以后永远不会再执行定时器任务。 Spring Quartz 特点: 1. 默认多线程异步执行 2. 一个任务在上一次调度未完成执行,下一次调度时间到时,会另起一个线程开始新的调度。在业务繁忙时,一个任务或许会有多个线程在执行,导致数据处理异常。 3. 单任务同步:配置属性,可以使一个任务的一次调度在未完成时,而不会开启下一次调度 4. 多个任务同时运行,任务之间没有直接的影响,多任务执行的快慢取决于CPU的性能 5. SchedulerFactoryBean不能使用注解来配置?还是我没找到注解的方法? Spring Task特点: 1. 默认单线程同步执行 2. 一个任务执行完上一次之后,才会执行下一次调度 3. 多任务之间按顺序执行,一个任务执行完成之后才会执行另一个任务 4. 多任务并行执行需要设置线程池 5. 全程可以通过注解配置 Spring Quartz配置: 1. 配置Job,job的targetObject可以使用spring注解@Service(value = “findObjectService”)配置的bean 2. 配置Trigger 3. 配置Scheduler < <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean id="findObjectJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="findObjectService" /> <property name="targetMethod" value="startJob" /> <property name="concurrent" value="false" /> </bean> <bean id="findObjectTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> <property name="jobDetail" ref="findObjectJob" /> <property name="repeatInterval" value="1000" /> <property name="startDelay" value="5000" /> </bean> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="findObjectTrigger" /> </list> </property> </bean> Spring Task配置: 1. 执行方法添加@Scheduled注解 2. 配置线程池 @Scheduled(cron = "0/1 * * * * ? ") public void startJob() {......} <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" 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/task http://www.springframework.org/schema/task/spring-task-3.1.xsd"> <task:executor id="executor" pool-size="5" /> <task:scheduler id="scheduler" pool-size="5" /> <task:annotation-driven executor="executor" scheduler="scheduler" /> <context:annotation-config /> <context:component-scan base-package="com.test1,com.test2"/>