spring的task和quartz的区别

前言

以前每次看定时任务,总是感觉怪怪的,因为每一种的写法都不一样,感觉没有套路,这不好.
其实,spring Task和Quartz都是定时任务的实现方式,甚至java中的timer也是定时任务的实现方式(只是没人用,个人没用过)。插一嘴,spring task实际上是一种轻量级的quartz,实现的方式比quartz简单很多

quartz:
  1. 默认多线程异步执行
  2. 能被集群实例化,支持分布式部署
  3. 使用JobStoreCMT(JDBCJobStore的子类),Quartz 能参与JTA事务;Quartz 能管理JTA事务(开始和提交)在执行任务之间,这样,任务做的事就可以发生在JTA事务里。
  4. 多个任务时,任务之间没有直接影响,多任务执行的快慢取决于CPU的性能
  5. 需要手动在xml中设置jobs(先配置job,之后为job设置特定trigger,最后将trigger在调度器中注册即可)
  6. 需要引入quartz的jar包
  7. 对异常的处理:Quartz的某次执行任务过程中抛出异常,不影响下一次任务的执行,当下一次执行时间到来时,定时器会再次执行任务。
  8. 任务类的对象:Quartz每次执行都创建一个新的任务类对象。

实例:以下链接,是我在gitHub上上传的可用代码,包括测试代码
个人gitHub链接
支持git下载(SSH链接):

git@github.com:LittleCadet/ftp.git

这里贴出代码中xml的部分配置

   <!-- 先配置job2-->
    <bean name="scanDirectoryJobBean" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="scanDirectory"/>
        <property name="targetMethod" value="scan"/>
        <property name="concurrent" value="false"/>
    </bean>
    <!--Quartz的定时任务2 的触发器 -->
    <bean id="scanDirectoryrigger"
          class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="scanDirectoryJobBean">
        </property>
        <property name="cronExpression" value="${download.cronExpression}" />
    </bean>
    <!-- 中心调度器-->
    <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no">
        <property name="triggers">
            <list>
                <!-- 执行定时下载服务器上文件-->
                <!--<ref bean="ftpDownloadTrigger" />-->

                <!-- 执行定时扫描服务器上的文件,一旦变动即可触发下载任务-->
                <ref bean="scanDirectoryrigger" />
            </list>
        </property>
    </bean>

task

  1. 默认单线程同步执行
  2. 支持注解(个人建议:不要把表达式通过注解的方式实现:不利于维护)
  3. 多个任务时,一个任务执行完毕以后才能执行下一个任务(如果当前任务执行时间过长,那么下一个任务可能无法及时运行,即会有阻塞现象发生),如果希望并发运行,需要配置线程池
  4. 对异常的处理:SpringTask不同,一旦某个任务在执行过程中抛出异常,则整个定时器生命周期就结束,以后永远不会再执行定时器任务。
  5. 任务类的对象:SpringTask则每次使用同一个任务类对象。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值