首页后端开发PHP怎么使用Quartz实现Java高可用定时任务

怎么使用Quartz实现Java高可用定时任务

时间2023-07-07 22:36:01发布访客分类PHP浏览1863
导读:这篇文章主要介绍了怎么使用Quartz实现Java高可用定时任务的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Quartz实现Java高可用定时任务文章都会有所收获,下面我们一起来看看吧。...
这篇文章主要介绍了怎么使用Quartz实现Java高可用定时任务的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Quartz实现Java高可用定时任务文章都会有所收获,下面我们一起来看看吧。

定时任务使用指南

如果你想做定时任务,有高可用方面的需求,或者仅仅想入门快,上手简单,那么选用它准没错。

定时任务模块是对Quartz框架进一步封装,使用更加简洁。

1、引入依赖

dependency>
    
groupId>
    xin.altitude.cms/groupId>
    
artifactId>
    ucode-cms-quartz/artifactId>
    
version>
    1.5.4.1/version>
    
/dependency>
    

2、快速上手

实现org.quartz.Job接口;使用注解CronExp添加任务的调度策略;使用注解Component将任务注入容器中。

启动项目,定时任务便处于监听与运行中。

@Component
@DisallowConcurrentExecution
@CronExp(cron="0/5****?")
publicclassDemoJobimplementsJob{

@Override
publicvoidexecute(JobExecutionContextcontext){
    
System.out.println("任务1:"+LocalDateTime.now());

}

}

3、手动触发定时任务

定时任务除了以既有频率周期性运行外,还有通过接口手动被触发的能力。

调用如下接口,可手动触发任务ID编号为jobId的任务。

http://localhost:8080/cms-api/quartz/job/{ jobId}

如果有手动触发定时任务的需求,则需要任务ID唯一并已知,因此需要在编写定时任务时手动指定。

@CronExp(id=1,cron="0/5****?")

通过注解CronExp的id属性可指定任务ID,不显示指定则使用随机ID,不满足已知的条件,因此无法手动触发。

4、带参数任务

尽管大多数任务不需要注入参数,但仍有少量的场景需要向定时任务注入参数。

publicvoidexecute(JobExecutionContextcontext){
    
/*如果在调用任务时传入了参数,则能够从Map中获取*/
MapString,Object>
    dataMap=context.getMergedJobDataMap();
    
/*比如从Map中获取一个键值对,一般来说参数均为基本数据类型*/
Objectkey=dataMap.get("key");
    
System.out.println("任务2:"+LocalDateTime.now()+":"+key);

}
    

在编写定时任务时,可从JobExecutionContext对象中解析一个Map,从而完成参数的注入。

http://localhost:8080/cms-api/quartz/job/1?key=a

上述http调用的含义是手动触发任务ID为【1】的任务,并且向其传递参数为【key】值为【a】的参数。

5、任务并发

本框架不支持任务并发,换句话说并发对定时任务不利,因此需要手动禁止。

需要注意的是Quartz的并发是指当任务执行耗时超过任务调度周期时,上一个任务未执行完,新任务是否执行。

一般来说需要显示禁止并发,在任务类上添加注解DisallowConcurrentExecution即可禁止任务并发。

6、持久化

如果定时任务有高可用的需求,那么需要对任务进行持久化。定时任务数据持久化到数据库中后,支持应用程序多开。定时任务持久化多节点部署后,集群中单节点故障不影响定时任务的执行。

定时任务持久化,仅需修改yml文件配置即可达到目标,无需修改代码。一般而言使用Mysql做持久化的容器。

spring:
quartz:
properties:
org.quartz.jobStore.isClustered:true
org.quartz.jobStore.class:org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass:org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource:qzDS
org.quartz.dataSource.qzDS.driver:com.mysql.cj.jdbc.Driver
org.quartz.dataSource.qzDS.URL:jdbc:mysql://localhost:3306/quartz-demo
org.quartz.dataSource.qzDS.user:root
org.quartz.dataSource.qzDS.password:123456

除了修改主机、端口、数据库名、用户名、密码五个参数外,其余参数使用默认值即可。

配置完数据库连接后,使用SQL脚本,注意初始化数据库

关于“怎么使用Quartz实现Java高可用定时任务”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么使用Quartz实现Java高可用定时任务”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

javaquartz

若转载请注明出处: 怎么使用Quartz实现Java高可用定时任务
本文地址: https://pptw.com/jishu/294824.html
怎么使用CSS3旋转元素 Java怎么输出二维数组内容

游客 回复需填写必要信息