三种定时任务总结

scheduled

Scheduled是Java标准库中自带的任务调度框架,它提供了一些基本的任务调度功能。可以通过Timer和TimerTask类来实现简单的定时任务调度,它们允许你指定任务的执行时间和重复间隔。但是,Scheduled在处理复杂的任务调度逻辑时可能会比较有限。

主程序上加注解@EnableScheduling

@EnableScheduling
public class BookApp {
    public static void main(String[] args) {
        SpringApplication.run(BookApp.class, args);
    }
}

使用定时器

@Scheduled(cron = "0 7 22 * * ? ")
@Override
public void testSchedule() {
    System.out.println("-------- 测试定时器----------");
}

quartz

Quartz是一个功能强大的开源任务调度器,提供了丰富的任务调度功能和灵活的配置选项。Quartz支持基于cron表达式的任务调度,可以精确地指定任务的触发时间和频率。它还具备集群和分布式调度的能力,可以在多台服务器上运行任务,并提供可靠的任务执行管理和监控。Quartz可以与Spring集成,方便在Java应用中使用。

导入依赖包

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

配置类

package com.wnhz.bms.authority.config;

import com.wnhz.bms.authority.job.WarmUpJob;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JobConfig {

    @Bean
    public JobDetail jobDetail(){
        return JobBuilder.newJob(WarmUpJob.class)
                .storeDurably(true)
                .build();
    }

    @Bean
    public Trigger trigger(){
        return TriggerBuilder.newTrigger()
                .forJob(jobDetail())
                .withSchedule(CronScheduleBuilder
                        .cronSchedule("00 02 11 * * ?"))
                .build();
    }
}

业务代码

package com.wnhz.bms.authority.job;


import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;

/**
 * 定时器业务代码
 */
public class WarmUpJob extends QuartzJobBean {
    //@Autowired
    //private IAuthorityService ias;

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("我是定时器quartz,准备运行..");
       // ias.warnUpUsernames();
    }
}

xxl-job

xxl-job是一个轻量级的分布式任务调度平台,适用于企业级任务调度和管理。它提供了Web界面来管理任务,支持任务的动态添加、删除和修改。xxl-job支持多线程并行调度,可以同时执行多个任务。它还提供了任务执行日志和报警功能,方便任务的监控和排查。xxl-job的底层使用Quartz作为任务调度引擎,并在其基础上进行了封装和扩展。

导入依赖

<dependencies>
    <dependency>
        <groupId>com.xuxueli</groupId>
        <artifactId>xxl-job-core</artifactId>
        <version>2.3.1</version>
    </dependency>
</dependencies>

配置yml文件

server:
  port: 13000
#xxljob的配置
xxl:
  job:
    admin:
      addresses: http://192.168.201.81:9898/xxl-job-admin
    executor:
      appname: xxl-job-executor-sample
      port: 9777
    accessToken: default_token

java配置类

package com.wnhz.ssc.job.config;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Slf4j
@Configuration
public class XxlJobConfig {
    @Value("${xxl.job.admin.addresses}")
    private String address;
    @Value("${xxl.job.executor.appname}")
    private String appName;
    @Value("${xxl.job.executor.port}")
    private int port;
    @Value("${xxl.job.accessToken}")
    private String accessToken;
    @Bean
    public XxlJobSpringExecutor xxlJobSpringExecutor(){
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setAdminAddresses(address);
        xxlJobSpringExecutor.setAppname(appName);
        xxlJobSpringExecutor.setPort(port);
        log.debug("xxl-job初始化成功:{}",xxlJobSpringExecutor);
        return xxlJobSpringExecutor;
    }
}

创建调度任务

@Component
@Slf4j
public class MyJobs {
    @XxlJob("helloXxl")
    public void helloXxlJob(){
        log.debug("hello,xxljob");
    }
}

三者对比

Schedule(Java标准库)

优点:

  • 简单易用,无需引入额外的依赖包。
  • 可以满足简单的任务调度需求。

缺点:

  • 功能相对有限,不适合处理复杂的任务调度逻辑。
  • 不支持分布式调度和集群部署。

应用场景:

  • 单机环境下的简单定时任务调度。

Quartz

优点:

  • 功能强大,支持复杂的任务调度需求。
  • 支持基于cron表达式的灵活任务触发时间和频率设定。
  • 支持分布式调度和集群部署,具备高可用性和可靠性。
  • 可与Spring等框架集成,使用方便。

缺点:

  • 学习和配置成本较高,相对复杂。
  • 对于简单的任务调度需求,可能显得过于臃肿。

应用场景:

  • 复杂的任务调度逻辑。
  • 分布式环境下的任务调度。
  • 高可用和可靠性要求较高的任务调度。

Xxl-job

优点:

  • 轻量级分布式任务调度平台,易于部署和使用。
  • 提供了Web界面来管理任务,操作简便。
  • 支持动态添加、删除和修改任务。
  • 支持分布式调度和集群部署,适用于多台服务器上运行任务。

缺点:

  • 功能相对较少,不如Quartz功能丰富。
  • 学习和配置成本较高,需要额外的安装和配置过程。

应用场景:

  • 企业级任务调度和管理。
  • 分布式环境下的任务调度需求。
  • 对任务管理界面友好性要求较高的场景。

总结

  • Schedule适用于简单的定时任务,无需引入额外依赖,但功能有限。
  • Quartz是功能强大的任务调度框架,适用于复杂的任务调度逻辑和高可用性要求较高的场景。
  • xxl-job是一个轻量级的分布式任务调度平台,适用于企业级任务调度和管理,提供了简便的Web界面。

根据具体需求和项目规模,选择适合的任务调度框架。当任务调度需求较为简单时,可以使用Schedule;当需要更灵活和复杂的任务调度功能时,可以选择Quartz;而对于分布式任务调度和企业级任务管理,xxl-job可能更适合一些。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值