Java中简单实用Quartz概述

作者:自己的九又四分之三站台 时间:2021-09-09 14:16:30 

1.Quartz是什么?

Quartz是一个开源的Java调度框架,可以用来实现在指定的时间或时间间隔触发任务执行的功能。它支持多种方式的作业调度,如基于日期、时间间隔和Cron表达式的调度。Quartz允许开发人员定义并执行大量的作业,并且在大规模部署时可以实现高可靠性、高可用性和可伸缩性。

Quartz框架包括一个调度器、触发器和作业,其中:

  • 调度器是Quartz框架的核心组件,它负责管理和协调所有触发器和作业的调度。

  • 触发器是定义作业调度计划的组件,它定义了作业应该在何时执行以及如何执行。

  • 作业是要执行的任务或业务逻辑。

Quartz框架可以与Spring框架集成,从而实现更加灵活和高效的作业调度。使用Quartz框架可以方便地实现定时任务、日志处理、数据备份等功能,是Java应用程序中常用的调度框架之一。

2. Quartz谁维护?

Quartz最初是由Terracotta公司开发的,现在Quartz的开发由Quartz项目社区维护和管理。Quartz社区包括Quartz开发团队和其他贡献者,他们共同负责开发、维护和推广Quartz框架,以确保其高质量和持续发展。Quartz项目社区是开放的,任何人都可以参与其中并为框架做出贡献。Quartz社区通过社区网站、邮件列表、GitHub存储库、Stack Overflow和其他社交媒体平台来支持和促进社区交流和参与。

3. 简单的应用

3.1 需求描述

定时执行一段代码

3.1.1. Spring中自带的

@Component
@EnableScheduling
public class ScheduledTask {
   @Scheduled(fixedDelay = 1000)
   public void task(){
       // 添加要执行的任务代码
       System.out.println("woshixiaocai");
   }
}

3.1.2. Quartz的简单使用

public class MyJob implements Job {
   public void execute(JobExecutionContext context) throws JobExecutionException {
       // 添加要执行的任务代码
       System.out.println("woshixiaocai");
   }
}

@Component
public class MyScheduler {
   @Value("${jcrbcorn}")
   private String jcrbcorn;

@Autowired
   private Scheduler scheduler;

@PostConstruct
   public void startScheduler() throws SchedulerException {
       Trigger trigger = TriggerBuilder.newTrigger()
           .withIdentity("myTrigger", "group1")
           .withSchedule(CronScheduleBuilder.cronSchedule(jcrbcorn))
           .build();

JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
           .withIdentity("myJob", "group1")
           .build();

scheduler.scheduleJob(jobDetail, trigger);
       scheduler.start();
   }

public void stopScheduler() throws SchedulerException {
       scheduler.shutdown(true);
   }

public void updateScheduler(String cronExpression) throws SchedulerException {
       Trigger oldTrigger = scheduler.getTrigger(new TriggerKey("myTrigger", "group1"));

Trigger newTrigger = TriggerBuilder.newTrigger()
           .withIdentity("myTrigger", "group1")
           .withSchedule(CronScheduleBuilder.cronSchedule("0 0/10 * * * ?"))
           .build();

scheduler.rescheduleJob(oldTrigger.getKey(), newTrigger);
   }
}

4. Quartz相较Spring的@Scheduled有什么优势

Quartz和Spring的@Scheduled都是用于任务调度的框架,它们的使用都非常方便和灵活,可以实现各种复杂的任务调度需求。两者的具体优劣可以根据具体需求和场景而定,以下是Quartz相较Spring的@Scheduled的几个优势:

  • 更灵活的调度表达式:Quartz支持Cron表达式,比Spring的@Scheduled支持的固定的时间间隔更加灵活。Cron表达式可以定义更复杂的调度规则,如指定特定的周几、月几、或每隔几天等,可以满足更加精细化的调度需求。

  • 更高的可靠性和健壮性:Quartz可以实现任务的持久化存储和集群化部署,以实现更高的可靠性和健壮性。Quartz任务在运行时可以通过锁机制保证只有一个实例在执行,从而避免了可能的并发问题。而Spring的@Scheduled只能实现单点部署,不能很好地应对高并发和故障恢复等场景。

  • 更丰富的可操作性:Quartz提供了更多的操作API,如暂停、恢复、修改、删除等,能够更好地满足实际业务需求。

  • 更广泛的应用场景:Quartz不仅可以应用于普通的任务调度,还可以应用于分布式系统、企业级应用、大数据处理等更为复杂的场景,具有更广泛的应用前景。

来源:https://blog.csdn.net/a13407142317/article/details/129037032

标签:java,quartz
0
投稿

猜你喜欢

  • SpringCloud高可用配置中心Config详解

    2023-11-17 11:25:00
  • JAVA中的基本数据类型

    2023-07-29 07:38:34
  • Java操作Excel的示例详解

    2021-07-08 00:56:56
  • SpringMVC统一异常处理实例代码

    2021-05-31 02:29:26
  • 使用java springboot设计实现的图书管理系统(建议收藏)

    2023-11-25 00:54:49
  • c#实现最简洁的快速排序(你绝对可以看懂)

    2022-04-01 22:35:48
  • SpringMVC框架整合Junit进行单元测试(案例详解)

    2022-04-10 20:53:37
  • C++基础概念讲述

    2022-10-31 16:56:05
  • Android 遍历SDCARD的文件夹并显示目录信息

    2021-06-01 21:49:04
  • 解析Java的JNI编程中的对象引用与内存泄漏问题

    2023-03-19 20:59:28
  • 详解Spring整合Ehcache管理缓存

    2022-02-10 00:50:17
  • Springboot打包部署代码实例

    2022-08-15 14:41:46
  • Java毕业设计实战之仿小米电子产品售卖商城系统的实现

    2022-09-29 10:19:47
  • Java实战入门之双色球彩票小游戏

    2023-05-12 04:07:13
  • SpringBoot和Vue.js实现的前后端分离的用户权限管理系统

    2023-09-03 14:37:33
  • Java线程池高频面试题总结

    2023-10-22 02:12:34
  • 通过Mybatis实现单表内一对多的数据展示示例代码

    2021-12-20 12:34:31
  • Spring 实现excel及pdf导出表格示例

    2023-12-21 04:17:32
  • c# 类成员的可访问性代码详解

    2022-03-14 22:43:59
  • java中的GC收集器详情

    2021-11-22 16:59:34
  • asp之家 软件编程 m.aspxhome.com