【技术选型】定时任务的选择

一、定时任务的技术选型

一般企业项目中,或多或少的都会使用到定时任务这样的功能,但是,对于定时任务有众多的实现方法。

主要有以下几种:

  1. Timer类和TimerTask类
  2. ScheduledExecutorService接口
  3. Quartz框架
  4. @Schedule Annotation
  5. Cron job
  6. XXL-job

二、对比选型

1. Timer

Java提供了java.util.Timer类和java.util.TimerTask类,可以用于实现简单的定时任务调度。Timer类可以在指定时间安排一个任务执行,TimerTask类则是要执行的任务。

2. ScheduledExecutorService接口

ScheduledExecutorService接口是Java中用于定时任务调度的一个接口,它继承了ExecutorService接口,并在此基础上增加了一些方法用于定时任务的调度和执行。以下是ScheduledExecutorService接口中常用的方法:

    2.1 schedule(Runnable command, long delay, TimeUnit unit):延迟指定时间后执行一次任务。

    2.2 schedule(Callable<V> callable, long delay, TimeUnit unit):延迟指定时间后执行一次带返回值的任务。

    2.3 scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit):延迟指定时间后开始执行任务,并按照固定的周期执行任务。

    2.4 scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit):延迟指定时间后开始执行任务,并在上一个任务执行完成后延迟指定时间后再次执行任务。

ScheduledExecutorService接口是Java并发包中的一部分,可以用于定时任务调度。使用该接口时,可以创建一个定时任务线程池,通过调用其scheduleAtFixedRate()scheduleWithFixedDelay()方法来实现定时任务调度。

3. Spring Quartz

Quartz是一个开源的作业调度框架,可以在Java应用程序中实现复杂的调度需求。它支持多种方式触发作业执行,如时间间隔、固定时间、日历间隔等。

4. @Schedule

是Java EE中的一个注解,用于指定一个方法或者一个定时任务的执行时间。该注解通常被用于企业级应用程序中,用于处理一些后台任务,如定期更新数据库、发送邮件等等。

在企业级生产环境中,可以通过在项目中使用@Schedule注解来实现定时任务的调度。通常情况下,需要遵循以下步骤:

1. 创建一个类,其中包含要执行的任务的方法,并在该方法上使用@Schedule注解。
2. 在应用程序中配置定时任务的执行时间,可以在web.xml文件中使用<servlet>和<servlet-mapping>元素来配置。
3. 部署应用程序到应用服务器中,以便定时任务可以自动执行。

    需要注意的是,在使用@Schedule注解时,需要考虑以下几个方面:

         1)指定执行时间的表达式需要根据具体需求进行调整。
         2)如果任务需要访问数据库等资源,则需要保证资源的可用性。
         3)如果任务需要并发执行,则需要考虑线程安全的问题。

5. Linux Cron 命令

    Cron是 UNIX, SOLARIS,LINUX 下的一个工具,功能非常强大。通过Cron 脚本能使计划任务定期地在系统后台自动运行。这种计划任务在UNIX, SOLARIS, LINUX下术语为 cron jobs。 Crontab (CRON 表) 则是用来记录在特定时间运行的CRON的一个脚本文件。

Crontab归结为以下几点特性:

     5.1、Crontab约束
     5.2、Crontab命令
     5.3、Crontab文件语法
     5.4、 Crontab示例
     5.5、Crontab环境设置
     5.6、邮件
     5.7、日志文件

6. XXL-JOB

      xxl-Job 是一个开源的分布式的任务调度平台,核心理念是为了迅速开发、简单学习、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线。

      支持集群部署;提供运维界面维护成本小;自带错误预警;相对elastic-job来说不需要额外的组件(zookeeper);支持调度策略;支持分片;

    

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值