Java中简单实用Quartz概述

 更新时间:2023年02月15日 11:07:30   作者:自己的九又四分之三站台  
Quartz是一个开源的Java调度框架,可以用来实现在指定的时间或时间间隔触发任务执行的功能,这篇文章主要介绍了Java中简单实用Quartz,需要的朋友可以参考下

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不仅可以应用于普通的任务调度,还可以应用于分布式系统、企业级应用、大数据处理等更为复杂的场景,具有更广泛的应用前景。

到此这篇关于Java中简单实用Quartz概述的文章就介绍到这了,更多相关java  quartz内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一篇文章带你深入了解Java类加载

    一篇文章带你深入了解Java类加载

    这篇文章主要介绍了Java中类加载过程全面解析,具有一定参考价值,需要的朋友可以了解下,希望能给你带来帮助
    2021-08-08
  • 详解JAVA Stream流

    详解JAVA Stream流

    这篇文章主要介绍了JAVA Stream流的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Log4j关闭Spring和Hibernate日志打印方式

    Log4j关闭Spring和Hibernate日志打印方式

    这篇文章主要介绍了Log4j关闭Spring和Hibernate日志打印方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 剖析SpringCloud Feign中所隐藏的坑

    剖析SpringCloud Feign中所隐藏的坑

    这篇文章主要为大家介绍了剖析SpringCloud Feign中所隐藏的坑示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Java+ElasticSearch+Pytorch实现以图搜图功能

    Java+ElasticSearch+Pytorch实现以图搜图功能

    这篇文章主要为大家详细介绍了Java如何利用ElasticSearch和Pytorch实现以图搜图功能,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-06-06
  • Java文件操作工具类fileUtil实例【文件增删改,复制等】

    Java文件操作工具类fileUtil实例【文件增删改,复制等】

    这篇文章主要介绍了Java文件操作工具类fileUtil,结合实例形式分析了java针对文件进行读取、增加、删除、修改、复制等操作的相关实现技巧,需要的朋友可以参考下
    2017-10-10
  • SpringBoot使用JavaCV处理rtsp流的示例代码

    SpringBoot使用JavaCV处理rtsp流的示例代码

    这篇文章主要为大家详细介绍了SpringBoot使用JavaCV处理rtsp流,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以跟随小编一起了解一下
    2024-02-02
  • Mybatis Mapper接口工作原理实例解析

    Mybatis Mapper接口工作原理实例解析

    这篇文章主要介绍了Mybatis Mapper接口工作原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Java获取指定字符串出现次数的方法

    Java获取指定字符串出现次数的方法

    这篇文章主要为大家详细介绍了Java获取指定字符串出现次数的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • 结合mybatis-plus实现简单不需要写sql的多表查询

    结合mybatis-plus实现简单不需要写sql的多表查询

    这篇文章主要给大家介绍了关于结合mybatis-plus实现简单不需要写sql的多表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mybatis-plus具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09

最新评论