java定时任务的实现方式

 更新时间:2016年02月14日 10:28:29   投稿:lijiao  
这篇文章主要介绍了java定时任务的实现方式,在应用里经常都有用到在后台跑定时任务的需求,如何进行java定时任务,本文为大家进行讲解,感兴趣的小伙伴们可以参考一下

在开发测试工具的应用后台,经常听到同事说要做个定时任务把做日志处理,或者数据清理,包括做些复杂的业务计算逻辑,在选择定时任务的时候,怎么能够快速实现,并且选择一种更适合自己的方式呢? 我这里把定时任务的实现收集整理了一些方法,希望可以帮到刚开始做定时任务的同学,写得不对的地方请指正。
一  Java 基本的定时任务,总结方法有三种:

1.1   创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果;

1.2   用Timer和TimerTask与第一种方法相比有如下好处:

  • 当启动和去取消任务时可以控制
  • 第一次执行任务时可以指定你想要的delay时间

1.3   用ScheduledExecutorService是从的java.util.concurrent里,做为并发工具类被引进的,这是最理想的定时任务实现方式,相比于上两个方法,它有以下好处:

  • 相比于Timer的单线程,它是通过线程池的方式来执行任务的
  • 可以很灵活的去设定第一次执行任务delay时间
  • 提供了良好的约定,以便设定执行的时间间隔

二  Spring 定时任务,总结方式也有三种:

2.1    ScheduledTimerTask:  Spring的ScheduledTimerTask定义了一个定时器任务的运行周期,遗憾的是,你可以指定任务执行的频度,但你无法精确指定它何时运行,这就需要用到第二种Quartz进行任务调度;

       创建一个业务任务,在Spring配置文件中声明 ;
       在Spring 配置文件中,配置ScheduledTimerTask ,并且关联上自定义的任务实例;
       启动定时器,Spring的TimerFactoryBean负责启动定时任务

 

 2.2    使用 Quartz:
 首先还是老样子定义业务逻辑任务:

在Spring中声明并且配置作业调度的触发方式

这里 Quartz的作业触发器有两种,分别是
org.springframework.scheduling.quartz.SimpleTriggerBean
org.springframework.scheduling.quartz.CronTriggerBean

 第一种SimpleTriggerBean,只支持按照一定频度调用任务,如每隔一段时间运行一次。

<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> 

第二种CronTriggerBean,支持到指定时间运行一次,如每天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扫描注解用的。

以上就是本文的全部内容,希望对大家的学习有所帮助。

相关文章

  • Java 冻结或解除冻结Excel中的行和列的方法

    Java 冻结或解除冻结Excel中的行和列的方法

    这篇文章主要介绍了Java 冻结或解除冻结Excel中的行和列的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Java多线程编程之Lock用法实例

    Java多线程编程之Lock用法实例

    这篇文章主要介绍了Java多线程编程之Lock用法实例,本文直接给出代码实例,需要的朋友可以参考下
    2015-05-05
  • IDEA下Servlet可能出现404的一些情况

    IDEA下Servlet可能出现404的一些情况

    相信有很多小伙伴遇到报错都不知道怎么处理,今天特地整理了这篇文章,文中对IDEA下Servlet可能出现404的一些情况作了详细的介绍,需要的朋友可以参考下
    2021-06-06
  • Java throw Exception实现异常转换

    Java throw Exception实现异常转换

    这篇文章主要介绍了Java throw Exception实现异常转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java ThreadLocal 线程安全问题解决方案

    Java ThreadLocal 线程安全问题解决方案

    这篇文章主要介绍了Java ThreadLocal 线程安全问题解决方案的相关资料,需要的朋友可以参考下
    2016-09-09
  • 三分钟读懂mybatis中resultMap和resultType区别

    三分钟读懂mybatis中resultMap和resultType区别

    这篇文章主要给大家介绍了mybatis中resultMap和resultType区别的相关资料,resultType和resultMap都是mybatis进行数据库连接操作处理返回结果的,需要的朋友可以参考下
    2023-07-07
  • 用递归查找有序二维数组的方法详解

    用递归查找有序二维数组的方法详解

    本篇文章是对用递归查找有序二维数组的方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Java编程中10个最佳的异常处理技巧

    Java编程中10个最佳的异常处理技巧

    这篇文章主要介绍了Java编程中10个最佳的异常处理技巧,在本文中,将讨论Java异常处理最佳实践,这些Java最佳实践遵循标准的JDK库,和几个处理错误和异常的开源代码,这还是一个提供给java程序员编写健壮代码的便利手册,需要的朋友可以参考下
    2015-01-01
  • spring boot 利用注解实现权限验证的实现代码

    spring boot 利用注解实现权限验证的实现代码

    这篇文章主要介绍了spring boot 利用注解实现权限验证的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • JAVA设置手动提交事务,回滚事务,提交事务的操作

    JAVA设置手动提交事务,回滚事务,提交事务的操作

    这篇文章主要介绍了JAVA设置手动提交事务,回滚事务,提交事务的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04

最新评论