Quartz 架构和单体应用介绍(五)

简介: 阅读完本文大概需要5分钟,本文主要分享内容如下: Quartz 架构介绍 SpringBoot Quartz 应用整合

4.5.7、服务重启补偿

在应用程序正常运行的时候,虽然没问题,但是当我们重启服务的时候,这个时候内存的里面的定时任务其实全部都被销毁,因此在应用程序启动的时候,还需要将正常的任务重新加入到服务中!

@Component
public class TaskConfigApplicationRunner implements ApplicationRunner {
    @Autowired
    private QuartzBeanRepository repository;
    @Autowired
    private Scheduler scheduler;
    @Override
    public void run(ApplicationArguments args) throws Exception {
        List<QuartzBean> list = repository.findAll();
        if(!CollectionUtils.isEmpty(list)){
            for (QuartzBean quartzBean : list) {
                //加载启动类型的定时任务
                if(quartzBean.getStatus().intValue() == 0){
                    QuartzUtils.createScheduleJob(scheduler,quartzBean);
                }
                //加载暂停类型的定时任务
                if(quartzBean.getStatus().intValue() == 1){
                    QuartzUtils.createScheduleJob(scheduler,quartzBean);
                    QuartzUtils.pauseScheduleJob(scheduler, quartzBean.getJobName());
                }
            }
        }
    }
}

在服务重启的时候,会重新将有效任务加入quartz 中!

4.5.8、接口服务测试

  • 调用quartz/createJob接口,创建任务
=========开始创建任务=========
=========创建任务成功,信息:{"cronExpression":"0/5 * * * * ?","id":"9280b799-f762-47b5-90e4-4874e1ad3c60","jobClass":"com.example.quartz.config.TestTask","jobName":"myJob","status":0}
testTask:2020-12-07 22:31:05
testTask:2020-12-07 22:31:10
testTask:2020-12-07 22:31:15
...
  • 调用quartz/pauseJob接口,暂停任务
=========开始暂停任务,请求参数:{"id":"9280b799-f762-47b5-90e4-4874e1ad3c60","jobName":"myJob"}
=========暂停任务成功=========
  • 调用quartz/runOnce接口,立即运行一次定时任务
=========立即运行一次定时任务,请求参数:{"jobName":"myJob"}
=========立即运行一次定时任务=========
testTask:2020-12-07 22:36:30
  • 调用quartz/resume接口,恢复定时任务
=========恢复定时任务,请求参数:{"id":"9280b799-f762-47b5-90e4-4874e1ad3c60","jobName":"myJob"}
=========恢复定时任务=========
testTask:2020-12-07 22:38:00
testTask:2020-12-07 22:38:05
testTask:2020-12-07 22:38:10
...
  • 调用quartz/update接口,更新定时任务
=========更新定时任务,请求参数:{"cronExpression":"0/10 * * * * ?","id":"9280b799-f762-47b5-90e4-4874e1ad3c60","jobClass":"com.example.quartz.config.TestTask","jobName":"myJob"}
=========更新定时任务=========
testTask:2020-12-07 22:39:10
testTask:2020-12-07 22:39:20
testTask:2020-12-07 22:39:30
...
  • 调用quartz/delete接口,删除定时任务
=========删除定时任务,请求参数:{"id":"9280b799-f762-47b5-90e4-4874e1ad3c60","jobName":"myJob"}=========
=========删除定时任务=========

4.5.9、添加监听器(选用)

当然,如果你想对某个任务实现监听,只需要添加一个配置类,将其注入即可!

@Configuration
public class TestTaskConfig {
 @Primary
    @Bean
    public Scheduler initScheduler() throws SchedulerException {
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
        //添加SchedulerListener监听器
        scheduler.getListenerManager().addSchedulerListener(new SimpleSchedulerListener());
        // 创建并注册一个全局的Trigger Listener
        scheduler.getListenerManager().addTriggerListener(new SimpleTriggerListener(), EverythingMatcher.allTriggers());
        // 创建并注册一个全局的Job Listener
        scheduler.getListenerManager().addJobListener(new SimpleJobListener(), EverythingMatcher.allJobs());
        scheduler.start();
        return scheduler;
    }
}

4.5.10、小结

需要注意的是:在 quartz 任务暂停之后再次启动时,会立即执行一次,在更新之后也会立即执行一次任务调度!

五、总结

本文主要围绕 quartz 的架构以及Springboot + quartz项目整合和应用做了初步的介绍。

可能有的朋友会发问,quartz 已经有对应的任务表,不需要手动创建,只需要配置quartz.properties文件即可!

没错,quartz官方提供了对应任务表,主要用于分布式架构下的任务处理!

如果只是单体应用,可以参考本文中创建一张单表来存储任务,实现简单!

如果集群环境部署,在下篇文章中,我们会详细的介绍quartz分布式架构的开发和应用!

鉴于笔者才疏学浅,如果发现有错误的地方,欢迎网友批评指导!

相关文章
|
3天前
|
存储 边缘计算 Cloud Native
“论模型驱动架构设计方法及其应用”写作框架,软考高级,系统架构设计师
模型驱动架构设计是一种用于应用系统开发的软件设计方法,以模型构造、模型转换和精化为核心,提供了一套软件设计的指导规范。在模型驱动架构环境下,通过创建出机器可读和高度抽象的模型实现对不同问题域的描述,这些模型独立于实现技术,以标准化的方式储存,利用模型转换策略来驱动包括分析、设计和实现等在内的整个软件开发过程。
|
3天前
|
缓存 C语言 计算机视觉
程序与技术分享:CPU0处理器的架构及应用
程序与技术分享:CPU0处理器的架构及应用
|
4天前
|
Kubernetes 测试技术 持续交付
深入理解微服务架构及其在现代后端系统中的应用
本文将深入探讨微服务架构的核心概念、设计原则以及如何在现代后端系统中实现和优化它。我们将从微服务的定义开始,逐步展开讨论其优势、面临的挑战,以及如何克服这些挑战。同时,文章还会涉及微服务与容器化技术、持续集成/持续部署(CI/CD)的协同作用,以及微服务架构的未来发展趋势。读者将获得对微服务架构全面而深刻的理解,并能够识别在实施过程中可能遇到的陷阱和解决方案。
24 1
|
2天前
|
弹性计算 负载均衡 Java
如何设计一个高可用的Java应用架构
如何设计一个高可用的Java应用架构
|
2天前
|
设计模式 监控 Java
打造高效的Java应用架构:从入门到精通
打造高效的Java应用架构:从入门到精通
|
3天前
|
运维 分布式计算 Cloud Native
云原生架构在现代企业中的应用与挑战
本文旨在深入探讨云原生技术在当代企业中的实际应用情况及其所面临的挑战。通过分析来自权威机构的数据、引用先进的科学理论,并结合具体案例研究,文章将详细阐述云原生技术的发展趋势、优势以及实施过程中可能遇到的问题。此外,文章还将提供针对性的解决策略,以帮助企业更好地利用云原生技术提升业务效率和创新能力。
|
4天前
|
设计模式 缓存 安全
打造高效的Java应用架构
打造高效的Java应用架构
|
1天前
|
缓存 监控 负载均衡
探索微服务架构中的API网关模式
在现代软件开发领域,微服务架构因其灵活性和可扩展性而备受青睐。本文将深入探讨微服务架构中至关重要的组件——API网关。通过分析API网关的核心功能、设计原则以及实际应用案例,我们旨在揭示其在提高系统性能、增强安全性及简化客户端与服务间通信中的重要作用。结合最新研究和实际开发经验,本文将为读者提供关于如何有效实施API网关的深刻见解。
|
1天前
|
存储 负载均衡 云计算
微服务架构中的服务发现与注册机制
在分布式系统设计中,微服务架构因其灵活性和可伸缩性而受到青睐。本文深入探讨了微服务架构下的服务发现与注册机制,通过分析Eureka、Consul和Zookeeper等工具的原理与实践,揭示了这些机制如何优化服务间的通信和故障转移。文章结合最新研究和案例,提供了对微服务架构中关键组件的深刻见解,并讨论了其在不同场景下的应用效果。
|
1天前
|
Kubernetes Java 测试技术
探索微服务架构的演变与实践
【6月更文挑战第28天】在数字化时代,软件架构不断演进以应对复杂多变的业务需求。本文将深入探讨微服务架构从概念到实践的发展过程,分析其设计原则、技术选型及实施策略,并结合作者亲身经验,阐述在微服务转型过程中的挑战与解决之道。