# springboot-quartz **Repository Path**: yangyangxu2016/springboot-quartz ## Basic Information - **Project Name**: springboot-quartz - **Description**: 支持动态调度 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-01-28 - **Last Updated**: 2024-01-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SpringBoot Quartz 集群 SpringBoot +Quartz + Mybatis + LayUI
通过数据库实现了Quartz集群。
一个动态管理Quartz任务的例子。不需要重启服务,即可以增加、修改、删除、停止、启动任务。 ## SQL脚本 本例中使用的是MySQL数据库。
在resources\db目录下,需要创建br数据库,和sys_job表。
集群功能需要创建11张表:
在官网的Downloads链接中,提供了11张表的建表语句: quartz-2.2.3-distribution\quartz-2.2.3\docs\dbTables 2.3版本之后在这个路径下:src\org\quartz\impl\jdbcjobstore 注意:如果修改了任务的类名或者路径,因为任务已经保存在数据库中,需要清空上述11张表和sys_job重新添加。
否则启动会报错。 ## 测试说明 1. 如果直接在数据库修改了任务,启动之前,必须清空quartz的11张表,参考:resources/db/清空表脚本 2. 启动工程,访问: http://localhost:9096/job/jobList
3. 第三个任务是发送邮件的任务,SQL语句需要修改为自己的QQ账号和授权码,不需要可以把状态改成0或者删掉。 ## 代码说明 1. 需要运行的任务类放在task包下面,必须实现BaseJob接口。 2. config下面的类是保证SpringBoot工程启动的时候任务可以运行。 3. JobFactory是保证Spring的对象可以注入到Job里面。 3. 最核心的类是 SchedulerUtil。 ## 并发功能说明 1. 在Job类上添加`@DisallowConcurrentExecution` 注解以后,任务就不会并行执行。
比如Task1,休眠60s(代表任务执行耗时60s),即使运行频率是1秒一次,在60s内也只会执行一次。
这时会造成其后的任务misfire(错过触发)。当正在执行的任务数超过线程池大小时,也会发生这种情况。
比如Task1去掉`@DisallowConcurrentExecution` 注解,如果1次运行60s,最多也只有10个Task1在运行。
造成misfire以后怎么办?CronTrigger和SimpleTrigger有不同的策略。 ## 集群功能测试 1. 复制多个工程,修改端口启动服务。 可以看到任务会随机地分配到几个机器,但是一定不会重复执行。 2. 停掉一个或者多个服务,其他的服务会检测到,并接管任务。