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扫描注解用的。

 

目录
相关文章
|
2月前
|
Java
用java搞定时任务,将hashmap里面的值存到文件里面去
本文介绍了如何使用Java的`Timer`和`TimerTask`类创建一个定时任务,将HashMap中的键值对写入到文本文件中,并提供了完整的示例代码。
43 1
用java搞定时任务,将hashmap里面的值存到文件里面去
|
6月前
|
Java jenkins 持续交付
Java项目jar包启动脚本,适用jenkins或定时任务或手动执行
Java项目jar包启动脚本,适用jenkins或定时任务或手动执行
374 3
|
2月前
|
Java BI 调度
Java Spring的定时任务的配置和使用
遵循上述步骤,你就可以在Spring应用中轻松地配置和使用定时任务,满足各种定时处理需求。
166 1
|
5月前
|
Java 调度
java定时任务3分钟一次
7月更文挑战第6天
235 1
|
5月前
|
负载均衡 Java 调度
Java中的定时任务实现详解
Java中的定时任务实现详解
|
5月前
|
Java 调度 Spring
Java中的定时任务调度与管理
Java中的定时任务调度与管理
|
5月前
|
监控 Java 调度
使用Java实现高性能的定时任务调度
使用Java实现高性能的定时任务调度
|
6月前
|
XML Java 数据格式
一篇文章讲明白java的常用定时任务的几种方式
一篇文章讲明白java的常用定时任务的几种方式
48 0
|
7月前
|
XML Java API
Spring Boot 整合 Quartz 实现 Java 定时任务的动态配置
Spring Boot 整合 Quartz 实现 Java 定时任务的动态配置
201 0
|
7月前
|
Java Linux 调度
Java【付诸实践 03】Spring定时任务注解@Scheduled+@EnableAsync用法详解(简单说明+应用场景+demo源代码+执行过程分析)
Java【付诸实践 03】Spring定时任务注解@Scheduled+@EnableAsync用法详解(简单说明+应用场景+demo源代码+执行过程分析)
146 2