当前位置: 首页 > 编程笔记 >

java定时任务的实现方式

吴升
2023-03-14
本文向大家介绍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定时任务:利用java Timer类实现定时执行任务的功能,包括了Java定时任务:利用java Timer类实现定时执行任务的功能的使用技巧和注意事项,需要的朋友参考一下 一、概述 在java中实现定时执行任务的功能,主要用到两个类,Timer和TimerTask类。其中Timer是用来在一个后台线程按指定的计划来执行指定的任务。 TimerTask一个抽象类,它的子类代表

  • 本文向大家介绍PHP实现定时执行任务的方法,包括了PHP实现定时执行任务的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现定时执行任务的方法,代码简单实用。分享给大家供大家参考。 具体实现方法如下: 希望本文所述对大家的PHP程序设计有所帮助。

  • 本文向大家介绍SpringBoot 实现定时任务的方法详解,包括了SpringBoot 实现定时任务的方法详解的使用技巧和注意事项,需要的朋友参考一下 一、定时任务实现的几种方式: Timer 这是java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少。 Sch

  • 本文向大家介绍Java实现任务超时处理方法,包括了Java实现任务超时处理方法的使用技巧和注意事项,需要的朋友参考一下 任务超时处理是比较常见的需求,比如在进行一些比较耗时的操作(如网络请求)或者在占用一些比较宝贵的资源(如数据库连接)时,我们通常需要给这些操作设置一个超时时间,当执行时长超过设置的阈值的时候,就终止操作并回收资源。Java中对超时任务的处理有两种方式:一种是基于异步任务结果的超时

  • 本文向大家介绍详解Spring Boot 定时任务的实现方法,包括了详解Spring Boot 定时任务的实现方法的使用技巧和注意事项,需要的朋友参考一下 最近在用SpringBoot写一个关于定时项目的时候遇到一个问题,就是客户端访问服务器的结果实际上是每个一段时间发生一次变化,并且在服务器在每天的某个固定的时间点都要触发一次事件。 我们当然可以在遇到每一个请求时都重新计算结果,但是为了提高效率

  • 本文向大家介绍ASP中实现执行定时任务的方法,包括了ASP中实现执行定时任务的方法的使用技巧和注意事项,需要的朋友参考一下 一个很常见的 ASP 问题 : “如何定时工作流程执行网页?”, 之所以会问这个问题大部分是因为管理员可能会利用一个 ASP 网页来作数据库维护的动作, 如备份, 在 Windows NT 平台有一个方法可以做工作流程, 那就是 AT 指令 + Schedule 服务,就是计

  • 本文向大家介绍java实现多线程之定时器任务,包括了java实现多线程之定时器任务的使用技巧和注意事项,需要的朋友参考一下 在Java中Timer是java.util包中的一个工具类,提供了定时器的功能。我们可以创建一个Timer对象,然后调用其schedule方法在某个特定的时间去执行一个特定的任务。并且你可以让其以特定频率一直执行某个任务,这个任务是用TimerTask来描述的,我们只需要将要

  • 本文向大家介绍详解PHP实现定时任务的五种方法,包括了详解PHP实现定时任务的五种方法的使用技巧和注意事项,需要的朋友参考一下 定时运行任务对于一个网站来说,是一个比较重要的任务,比如定时发布文档,定时清理垃圾信息等,现在的网站大多数都是采用PHP动态语言开发的,而对于PHP的实现决定了它没有Java和.Net这种AppServer的概念,而http协议是一个无状态的协议,PHP只能被用户触发,被