Spring boot整合quartz方法
目录
1.定时任务
1.quartz说明
2.Quartz提供了不同的数据存储策略以管理作业调度信息:
1.Quartz引入依赖
2.开发定时任务
(1)更新定时任务
(2)停止定时任务
(3)唤醒定时任务
(4)删除定时任务
1.定时任务
定时任务的实现途径多种多样,以下是一些不同的方法:
1. 在应用程序的启动类中引入`@EnableScheduling`注解,以此激活定时任务的功能。随后,可以利用注解`@Scheduled`,配合Cron表达式(例如`@Scheduled(cron = "0/1 * * * * ?")`)来定义任务的执行频率,同时确保这些任务被注册为Spring管理的Bean。
2. 采用外部任务调度框架,例如xxl-job或elastic-Job,这些框架提供了额外的功能和灵活性,以满足更复杂的调度需求。
3. 使用Quartz作为底层实现,许多第三方框架实际上都是基于Quartz构建的,它们提供了更高级的调度功能和更好的集成支持。
1.quartz说明
Quartz是一个纯Java编写的工作调度框架,它包含以下核心组件:
1. 调度器(Scheduler):
这是Quartz中负责调度作业的核心组件。它通过与触发器(Trigger)和作业详情(JobDetail)的交互来控制作业的执行。调度器作为一个容器,保存了作业和触发器,它们在调度器中都有唯一的组和名称,这些标识符用于调度器内部查找和识别特定的作业或触发器。触发器和作业详情的组名和名称必须是唯一的,尽管它们可以相同,因为它们属于不同的类别。
2. 触发器(Trigger):
在Quartz中,触发器定义了作业执行的时间规则。它有两个主要的子类型:SimpleTrigger和CronTrigger,分别用于简单的周期性调度和复杂的时间表调度。
3. 作业详情(JobDetail):
这包含了Quartz中作业的具体信息,包括作业的唯一标识和要执行的任务。作业详情还允许通过JobDataMap传递额外的数据给作业。
4. 作业(Job):
这是Quartz中定义作业具体执行逻辑的接口。实现这个接口的类包含了作业执行的核心代码。
5. 作业构建器(JobBuilder):
这是一个工具类,用于构建作业实例,并定义作业的属性,如名称和组名。构建的实例将代表一个实际要执行的作业。
6. 触发器构建器(TriggerBuilder):
这个工具类用于创建触发器实例,定义触发器的属性和行为。
7. 监听器(Listener):
Quartz提供了多种监听器,包括作业监听器(JobListener)、触发器监听器(TriggerListener)和调度器监听器(SchedulerListener),它们用于监控作业、触发器和调度器的事件和状态变化。
2.Quartz提供了不同的数据存储策略以管理作业调度信息:
内存存储(RAMJobStore): Quartz默认使用内存作为存储介质,这种方式因其直接在内存中操作而具有极高的性能。然而,这种存储方式不具备数据持久性,一旦应用程序崩溃或需要重新部署,所有存储的调度信息将无法保留。
数据库存储: 通过将调度信息存储在数据库中,Quartz可以实现单实例或集群部署,便于对大量作业进行集中管理和动态控制,如暂停、停止或修改作业。即使在服务器关闭或重启后,作业的调度信息也能得以保留。不过,这种存储方式的性能会受到数据库连接速度的影响。
1.Quartz引入依赖
首先,要在Springboot项目可以直接引入下面依赖
org.springframework.boot spring-boot-starter-quartz
如果是非Springboot项目,可以引入以下依赖
org.quartz-scheduler quartz 2.2.3
2.开发定时任务
首先,我们需要创建一个类
package com.example.yin.taskjob; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; public class TaskJob implements Job { @Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { System.out.println("定时任务执行:"+System.currentTimeMillis()); } }
接着,我们需要为他设置接口。
public interface QuartzService { public R addCronJob(String jobName, String cron, String jobClassName, String triggerName); public R updateCronJob(String jobName,String cron, String jobClassName); public R pauseCronJob(String jobName, String triggerName); public R resumeCronJob(String jobName, String triggerName); public R deleteCronJob(String jobName, String jobGroup, String triggerName, String triggerGroup); }
接口中的方法用于添加、更新、暂停、恢复和删除基于Cron表达式的定时作业;返回类型为R的对象,R可能是一个自定义的响应类,用于封装方法执行的结果,请根据自己项目来修改!
然后,定时任务继承TaskJob,并实现其方法
@Service public class QuartServiceImpl implements QuartzService { @Autowired private Scheduler scheduler; private static final String DEFAULT_JOB_GROUP = "default_job_group"; private static final String DEFAULT_TRIGGER_GROUP = "default_trigger_group"; private static final String TRIGGER_PRE = "Trigger_"; @Override public R addCronJob(String jobName, String cron, String jobClassName, String triggerName) { try{ JobKey jobKey = JobKey.jobKey(jobName, DEFAULT_JOB_GROUP); if (scheduler.checkExists(jobKey)){ return R.fail("【添加定时任务】该作业已存在"); } //构建job JobDetail job = (JobDetail) JobBuilder .newJob((Class