springboot2.2.X集成quartz并进行持久化

本文介绍了Quartz这一开源定时任务调度框架,详细解释了其相较于Java.util.Timer的优势,包括持久性作业保持、作业管理和更丰富的调度选项。文章还提供了基础配置步骤及依赖添加指导,并提到了在Spring Boot中集成Quartz的注意事项。

什么是quartz

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能:
持久性作业 - 就是保持调度定时的状态;
作业管理 - 对调度作业进行有效的管理;

quartz入门

*参考网址:*https://www.w3cschool.cn/quartz_doc/quartz_doc-2put2clm.html

添加quartz依赖

在这里插入图片描述

quartz相关配置

1:quartz基础配置
在这里插入图片描述

2:quartz持久化数据库相关配置

在这里插入图片描述
ps: 之前按照w3c上的配置一直无法配置成功后来再springboot集成quartz上找到了解决方案(以后解决问题第一步需要查看官方文档)

3:配置文件

在这里插入图片描述

4:测试job

在这里插入图片描述

总结

这里只是针对quartz的简单配置与使用,如果需要后续动态配置任务可以根据官方文档继续深入。
如果想要更强大的任务调度可以使用 Elastic-Job(http://elasticjob.io/)

### Spring Boot 3.x 中使用 Quartz 和 MySQL 实现动态任务调度 在 Spring Boot 3.x 中实现基于 Quartz 的动态任务调度结合 MySQL 存储任务数据是一个常见的需求。以下是详细的解决方案: #### 配置依赖项 为了支持 Quartz 调度功能以及与 MySQL 数据库集成,需要引入以下 Maven 或 Gradle 依赖项。 对于 Maven: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> ``` 对于 Gradle: ```gradle implementation 'org.springframework.boot:spring-boot-starter-quartz' implementation 'mysql:mysql-connector-java' ``` --- #### 配置 Quartz 使用 MySQL Quartz 支持通过数据库存储其元数据(如任务定义、触发器等)。为此,需创建相应的表结构将这些表初始化到 MySQL 数据库中。可以通过运行官方提供的 SQL 文件来完成此操作[^2]。 配置 `application.properties` 或 `application.yml` 来启用 Quartz 连接至 MySQL 数据源: ```properties # DataSource Configuration spring.datasource.url=jdbc:mysql://localhost:3306/quartz_db?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=password # Quartz Configuration spring.quartz.job-store-type=jdbc spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_ spring.quartz.properties.org.quartz.jobStore.isClustered=true spring.quartz.properties.org.quartz.threadPool.threadCount=10 ``` 上述配置指定了 Quartz 将使用 JDBC Job Store,设置了线程池大小和其他必要属性。 --- #### 创建动态任务管理接口 可以封装一个服务类用于动态添加、修改或删除任务。下面展示了一个简单的例子: ```java import org.quartz.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import org.springframework.stereotype.Service; @Service public class DynamicTaskService { @Autowired private Scheduler scheduler; /** * 添加新任务 */ public void addJob(String jobName, String jobGroup, Class<? extends Job> jobClass, Trigger trigger) throws SchedulerException { JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroup).build(); scheduler.scheduleJob(jobDetail, trigger); } /** * 删除现有任务 */ public boolean deleteJob(String jobName, String jobGroup) throws SchedulerException { return scheduler.deleteJob(JobKey.jobKey(jobName, jobGroup)); } /** * 暂停任务 */ public void pauseJob(String jobName, String jobGroup) throws SchedulerException { scheduler.pauseJob(JobKey.jobKey(jobName, jobGroup)); } /** * 恢复任务 */ public void resumeJob(String jobName, String jobGroup) throws SchedulerException { scheduler.resumeJob(JobKey.jobKey(jobName, jobGroup)); } } ``` 该服务提供了基本的任务管理方法,包括新增、暂停、恢复和移除任务等功能。 --- #### 示例:动态添加定时任务 假设有一个自定义任务类如下所示: ```java import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class SampleJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Sample Job Executed at " + new java.util.Date()); } } ``` 调用 `DynamicTaskService.addJob()` 方法即可动态注册这个任务: ```java Trigger trigger = TriggerBuilder.newTrigger() .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever()) .build(); dynamicTaskService.addJob("sampleJob", "group1", SampleJob.class, trigger); ``` 这会每五秒执行一次指定的任务逻辑。 --- #### 处理常见错误 如果遇到类似于 `Public Key Retrieval is not allowed` 的异常,则可能是由于 MySQL 连接设置不正确引起的。解决办法是在 URL 参数中显式禁用公钥检索功能[^3]: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/quartz_db?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC ``` --- #### 总结 以上介绍了如何在 Spring Boot 3.x 环境下利用 Quartz 和 MySQL 构建动态任务调度系统。整个过程涉及依赖导入、数据库配置、任务管理和具体实现等多个方面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值