珠宝行业网站建设生活馆网站开发背景
news/
2025/9/23 15:15:35/
文章来源:
珠宝行业网站建设,生活馆网站开发背景,泉州网站建设科技公司,制作h5页面的工具有哪些目录
1.定时任务实现
2.quartz说明
3.存储方式
4.示例
5.定时任务的重新定制#xff0c;恢复#xff0c;暂停及删除 1.定时任务实现
定时任务的实现方式有很多#xff0c;如下#xff1a;
1.启动类中添加EnableScheduling#xff0c;开启定时任务功能#xff0c;然…目录
1.定时任务实现
2.quartz说明
3.存储方式
4.示例
5.定时任务的重新定制恢复暂停及删除 1.定时任务实现
定时任务的实现方式有很多如下
1.启动类中添加EnableScheduling开启定时任务功能然后通过注解的方式如
Scheduled(cron 0/1 * * * * ?)设置定时任务的执行方式定时任务要设置成一个spring容器的bean
2.通过第三方框架的方式如xxl-jobelastic-Job。
3.通过quartz方式第三方的框架也是基于quartz实现的。
2.quartz说明
quartz是完全有java开发的作业调度框架包含一下几个核心概念
(1)Scheduler
是quartz中的任务调度器通过trigger和jobdetail进行调度暂停和删除任务相当于一个容器装载着任务和触发器。Trigger 和 JobDetail 可以注册到 Scheduler 中两者在 Scheduler 中拥有各自的组及名称组及名称是 Scheduler 查找定位容器中某一对象的依据Trigger 的组及名称必须唯一JobDetail 的组和名称也必须唯一但可以和 Trigger 的组和名称相同因为它们是不同类型的。
(2)trigger
Quartz 中的触发器是一个类描述触发 Job 执行的时间触发规则主要有 SimpleTrigger 和 CronTrigger 这两个子类。
(3)jobDetail
Quartz 中需要执行的任务详情包括了任务的唯一标识和具体要执行的任务可以通过 JobDataMap 往任务中传递数据。
(4)job
Quartz 中具体的任务包含了任务的具体实现逻辑。
(5)JobBuilder
用于创建一个任务实例也可以定义关于该任务的详情比如任务名、组名等这个声明的实例将会作为一个实际执行的任务。
(6)TriggerBuilder
触发器创建器用于创建触发器trigger实例。
(7)监听器组件
JobListener、TriggerListener、SchedulerListener监听器用于对组件的监听。
3.存储方式
(1)RAMJobStore
默认情况下 Quartz 会将任务调度存储在内存中这种方式性能是最好的因为内存的速度是最快的。不好的地方就是数据缺乏持久性但程序崩溃或者重新发布的时候所有运行信息都会丢失。
(2)数据库方式
存储数据库后可以做单点也可以做集群当任务多了之后可以统一进行管理随时停止、暂停、修改任务。 关闭或者重启服务器运行的信息都不会丢失。缺点就是运行速度快慢取决于连接数据库的快慢。
4.示例
(1)引入依赖
springboot项目可以直接引入下面依赖。 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-quartz/artifactId/dependency
非springboot项目引入下面依赖当然springboot项目也可以使用此依赖
dependencygroupIdorg.quartz-scheduler/groupIdartifactIdquartz/artifactIdversion2.2.3/version
/dependency (2)开发定时任务
package com.example.demo.job;import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;/*** Author linaibo* Date 2023/11/17 16:52* Version 1.0*/
public class SimpleJob extends QuartzJobBean {Overrideprotected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {System.out.println(执行成功);}
}定时任务继承QuartzJobBean并实现其方法。
(3)配置定时任务
package com.example.demo.config;import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;/*** Author linaibo* Date 2023/11/17 16:54* Version 1.0*/
Configuration
Order(2)
public class QuartzConfig implements ApplicationRunner {Autowiredprivate Scheduler scheduler;Overridepublic void run(ApplicationArguments args) throws Exception {try{String cron 0/5 0/1 * * * ?;Class? extends Job jobClazz (Class? extends Job)Class.forName(com.example.demo.job.SimpleJob);JobDetail jobDetail JobBuilder.newJob(jobClazz).withIdentity(test).storeDurably().build();CronTrigger cronTrigger TriggerBuilder.newTrigger().withIdentity(test).startNow().withSchedule(CronScheduleBuilder.cronSchedule(cron)).build();scheduler.scheduleJob(jobDetail, cronTrigger);} catch (ClassNotFoundException e) {System.out.println(定时任务类路径出错请输入类的绝对路径);} catch (SchedulerException e) {System.out.println(创建定时任务出错);}}
}这里使用ApplicationRunner简单说明一下
ApplicationRunner常用于项目启动后也就是ApringApplication.run()执行结束立马执行某些逻辑。可用于项目的准备工作比如加载配置文件加载执行流定时任务等等。
使用方式
实现ApplicationRunner接口重写run方法定义具体的执行逻辑
Order注解用于决定多个bean的执行顺序按照值从小到大执行 值可为负数
Order(-1)优先于Order(0) Order(1)优先于Order(2)
还有个接口也可以实现和ApplicationRunner一样的功能
CommandLineRunner
CommandLineRunner接口的run方法接收的参数为String数组 创建配置文件实现ApplicationRunner接口实现run方法在方法中首先通过反射方式获取到要执行定时任务的类来创建jobdetail然后根据执行规则创建执行的触发器trigger再将jobdetail和trigger放到scheduler容器中按照规则进行任务的执行。
定时任务的全路径名称执行的触发器以及任务名称可以存放在数据库中并在前端追加可视化画面来进行修改删除及立即执行的功能。
定时任务的数据表可以自己设计也可以参照官网如下
初始化 Quartz 数据表
下载 Quartz 发布包Downloads
解压缩进入SQL脚本所在位置quartz-2.3.0-SNAPSHOT/src/org/quartz/impl/jdbcjobstore/tables_mysql_innodb.sql
导入 tables_mysql_innodb.sql 脚本文件。
5.定时任务的重新定制恢复暂停及删除
(1)重新定制
Service
public class QuartzJobServiceImpl implements QuartzJobService {Autowiredprivate Scheduler scheduler;SneakyThrowsOverridepublic void rescheduleJob(String jobName, String jobGroupName, String cron) {TriggerKey triggerKey TriggerKey.triggerKey(jobName, jobGroupName);CronTrigger cronTrigger TriggerBuilder.newTrigger().withIdentity(triggerKey).startNow().withSchedule(CronScheduleBuilder.cronSchedule(cron)).build();scheduler.rescheduleJob(triggerKey, cronTrigger);}(2)恢复
Service
public class QuartzJobServiceImpl implements QuartzJobService {Autowiredprivate Scheduler scheduler;SneakyThrowsOverridepublic void resumeJob(String jobName, String jobGroupName) {scheduler.resumeJob(JobKey.jobKey(jobName, jobGroupName));}
}(3)暂停
Service
public class QuartzJobServiceImpl implements QuartzJobService {Autowiredprivate Scheduler scheduler;SneakyThrowsOverridepublic void pauseJob(String jobName, String jobGroupName) {scheduler.pauseJob(JobKey.jobKey(jobName, jobGroupName));}
}(4)删除
Service
public class QuartzJobServiceImpl implements QuartzJobService {Autowiredprivate Scheduler scheduler;SneakyThrowsOverridepublic void deleteJob(String jobName, String jobGroupName) {scheduler.pauseTrigger(TriggerKey.triggerKey(jobName, jobGroupName));scheduler.unscheduleJob(TriggerKey.triggerKey(jobName, jobGroupName));scheduler.deleteJob(JobKey.jobKey(jobName, jobGroupName));}
}参照
Spring Boot 集成 Quartz任务调度框架_springboot集成quartz_人人都在发奋的博客-CSDN博客
springboot整合quartz项目使用含完整代码_springboot quartz-CSDN博客
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/912954.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!