源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

java定时任务的实现方式

  • 时间:2021-07-04 18:49 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java定时任务的实现方式
在开发测试工具的应用后台,经常听到同事说要做个定时任务把做日志处理,或者数据清理,包括做些复杂的业务计算逻辑,在选择定时任务的时候,怎么能够快速实现,并且选择一种更适合自己的方式呢? 我这里把定时任务的实现收集整理了一些方法,希望可以帮到刚开始做定时任务的同学,写得不对的地方请指正。 [b]一  Java 基本的定时任务,总结方法有三种: [/b] 1.1   创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果; [img]http://files.jb51.net/file_images/article/201602/2016214103209915.png?2016114103220[/img] 1.2   用Timer和TimerTask与第一种方法相比有如下好处: [list] [*][b]当启动和去取消任务时可以控制[/b][/*] [*][b]第一次执行任务时可以指定你想要的delay时间[/b][/*] [/list] [img]http://files.jb51.net/file_images/article/201602/2016214103309424.png?2016114103318[/img] 1.3   用ScheduledExecutorService是从的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式,相比于上两个方法,它有以下好处: [list] [*][b]相比于Timer的单线程,它是通过线程池的方式来执行任务的[/b][/*] [*][b]可以很灵活的去设定第一次执行任务delay时间[/b][/*] [*][b]提供了良好的约定,以便设定执行的时间间隔[/b][/*] [/list] [b][/b] [b]二  Spring 定时任务,总结方式也有三种:[/b] 2.1    ScheduledTimerTask:  Spring的ScheduledTimerTask定义了一个定时器任务的运行周期,遗憾的是,你可以指定任务执行的频度,但你无法精确指定它何时运行,这就需要用到第二种Quartz进行任务调度;        创建一个业务任务,在Spring配置文件中声明 ;        在Spring 配置文件中,配置ScheduledTimerTask ,并且关联上自定义的任务实例;        启动定时器,Spring的TimerFactoryBean负责启动定时任务 [img]http://files.jb51.net/file_images/article/201602/2016214103424650.png?2016114103431[/img]   [img]http://files.jb51.net/file_images/article/201602/2016214103517783.png?2016114103524[/img]  2.2    使用 Quartz:  首先还是老样子定义业务逻辑任务: [img]http://files.jb51.net/file_images/article/201602/2016214103555315.png?201611410363[/img] 在Spring中声明并且配置作业调度的触发方式 [img]http://files.jb51.net/file_images/article/201602/2016214103616832.png?2016114103623[/img] 这里 Quartz的作业触发器有两种,分别是 org.springframework.scheduling.quartz.SimpleTriggerBean org.springframework.scheduling.quartz.CronTriggerBean  第一种[b]SimpleTriggerBean[/b],只支持按照一定频度调用任务,如每隔一段时间运行一次。
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean"> 
  <property name="jobDetail" ref="myJob" /> 
  <property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 --> 
  <property name="repeatInterval" value="2000" /><!-- 每2秒调度一次 --> 
</bean> 
第二种[b]CronTriggerBean[/b],支持到指定时间运行一次,如每天12:00运行一次,如上配置; 配置调度工厂 org.springframework.scheduling.quartz.SchedulerFactoryBean,代码如上; 启动你的应用即可  2.3   使用 Spring-Task          Spring自带的定时任务工具,spring task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种:          第一步:编写任务类;TaskJob,method job1  --代码省略          第二步:在spring配置文件头中添加命名空间及描述
<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"> 
        第三步:spring配置文件中设置具体的任务
<task:scheduled-tasks>  
    <task:scheduled ref="taskJob" method="job1" cron="0 * * * * ?"/>  
</task:scheduled-tasks> 
<context:component-scan base-package="com.alibaba.mytask" /> 
说明:ref参数指定的即任务类,method指定的即需要运行的方法,cron及cronExpression表达式,具体写法这里不介绍了,<context:component-scan base-package="com.alibaba.mytask" />spring扫描注解用的。 以上就是本文的全部内容,希望对大家的学习有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部