当前位置: 首页 > news >正文

武进网站建设公司wordpress网站怎么进入

武进网站建设公司,wordpress网站怎么进入,襄阳seo公司,常州微信网站建设SpringBoot教程#xff08;二十四#xff09; | SpringBoot实现分布式定时任务之Quartz#xff08;动态新增、修改等操作#xff09; 前言数据库脚本创建需要被调度的方法创建相关实体类创建业务层接口创建业务层实现类控制层类测试结果 前言 我这边的SpringBoot的版本为2… SpringBoot教程二十四 | SpringBoot实现分布式定时任务之Quartz动态新增、修改等操作 前言数据库脚本创建需要被调度的方法创建相关实体类创建业务层接口创建业务层实现类控制层类测试结果 前言 我这边的SpringBoot的版本为2.6.13其中Quartz是使用的以下方式引入 !--quartz定时任务-- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-quartz/artifactId /dependency数据库脚本 首先确定maven拉取了 spring-boot-starter-quartz 的依赖再接着到私仓下面找到 你的私仓地址\org\quartz-scheduler\quartz\2.3.2把这个下面的quartz-2.3.2.jar 给解压 然后到这个文件的 “quartz-2.3.2\org\quartz\impl\jdbcjobstore” 下面就可以可以看到 我这边选择的是“tables_mysql_innodb.sql”脚本 内容如下执行以后会出现11张表 # # In your Quartz properties file, youll need to set # org.quartz.jobStore.driverDelegateClass org.quartz.impl.jdbcjobstore.StdJDBCDelegate # # # By: Ron Cordell - roncordell # I didnt see this anywhere, so I thought Id post it here. This is the script from Quartz to create the tables in a MySQL database, modified to use INNODB instead of MYISAM.DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; DROP TABLE IF EXISTS QRTZ_LOCKS; DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS; DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; DROP TABLE IF EXISTS QRTZ_TRIGGERS; DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; DROP TABLE IF EXISTS QRTZ_CALENDARS;CREATE TABLE QRTZ_JOB_DETAILS( SCHED_NAME VARCHAR(120) NOT NULL, JOB_NAME VARCHAR(190) NOT NULL, JOB_GROUP VARCHAR(190) NOT NULL, DESCRIPTION VARCHAR(250) NULL, JOB_CLASS_NAME VARCHAR(250) NOT NULL, IS_DURABLE VARCHAR(1) NOT NULL, IS_NONCONCURRENT VARCHAR(1) NOT NULL, IS_UPDATE_DATA VARCHAR(1) NOT NULL, REQUESTS_RECOVERY VARCHAR(1) NOT NULL, JOB_DATA BLOB NULL, PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)) ENGINEInnoDB;CREATE TABLE QRTZ_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(190) NOT NULL, TRIGGER_GROUP VARCHAR(190) NOT NULL, JOB_NAME VARCHAR(190) NOT NULL, JOB_GROUP VARCHAR(190) NOT NULL, DESCRIPTION VARCHAR(250) NULL, NEXT_FIRE_TIME BIGINT(13) NULL, PREV_FIRE_TIME BIGINT(13) NULL, PRIORITY INTEGER NULL, TRIGGER_STATE VARCHAR(16) NOT NULL, TRIGGER_TYPE VARCHAR(8) NOT NULL, START_TIME BIGINT(13) NOT NULL, END_TIME BIGINT(13) NULL, CALENDAR_NAME VARCHAR(190) NULL, MISFIRE_INSTR SMALLINT(2) NULL, JOB_DATA BLOB NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP) REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)) ENGINEInnoDB;CREATE TABLE QRTZ_SIMPLE_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(190) NOT NULL, TRIGGER_GROUP VARCHAR(190) NOT NULL, REPEAT_COUNT BIGINT(7) NOT NULL, REPEAT_INTERVAL BIGINT(12) NOT NULL, TIMES_TRIGGERED BIGINT(10) NOT NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) ENGINEInnoDB;CREATE TABLE QRTZ_CRON_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(190) NOT NULL, TRIGGER_GROUP VARCHAR(190) NOT NULL, CRON_EXPRESSION VARCHAR(120) NOT NULL, TIME_ZONE_ID VARCHAR(80), PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) ENGINEInnoDB;CREATE TABLE QRTZ_SIMPROP_TRIGGERS(SCHED_NAME VARCHAR(120) NOT NULL,TRIGGER_NAME VARCHAR(190) NOT NULL,TRIGGER_GROUP VARCHAR(190) NOT NULL,STR_PROP_1 VARCHAR(512) NULL,STR_PROP_2 VARCHAR(512) NULL,STR_PROP_3 VARCHAR(512) NULL,INT_PROP_1 INT NULL,INT_PROP_2 INT NULL,LONG_PROP_1 BIGINT NULL,LONG_PROP_2 BIGINT NULL,DEC_PROP_1 NUMERIC(13,4) NULL,DEC_PROP_2 NUMERIC(13,4) NULL,BOOL_PROP_1 VARCHAR(1) NULL,BOOL_PROP_2 VARCHAR(1) NULL,PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) ENGINEInnoDB;CREATE TABLE QRTZ_BLOB_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_NAME VARCHAR(190) NOT NULL, TRIGGER_GROUP VARCHAR(190) NOT NULL, BLOB_DATA BLOB NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP), INDEX (SCHED_NAME,TRIGGER_NAME, TRIGGER_GROUP), FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP) REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)) ENGINEInnoDB;CREATE TABLE QRTZ_CALENDARS ( SCHED_NAME VARCHAR(120) NOT NULL, CALENDAR_NAME VARCHAR(190) NOT NULL, CALENDAR BLOB NOT NULL, PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)) ENGINEInnoDB;CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS ( SCHED_NAME VARCHAR(120) NOT NULL, TRIGGER_GROUP VARCHAR(190) NOT NULL, PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)) ENGINEInnoDB;CREATE TABLE QRTZ_FIRED_TRIGGERS ( SCHED_NAME VARCHAR(120) NOT NULL, ENTRY_ID VARCHAR(95) NOT NULL, TRIGGER_NAME VARCHAR(190) NOT NULL, TRIGGER_GROUP VARCHAR(190) NOT NULL, INSTANCE_NAME VARCHAR(190) NOT NULL, FIRED_TIME BIGINT(13) NOT NULL, SCHED_TIME BIGINT(13) NOT NULL, PRIORITY INTEGER NOT NULL, STATE VARCHAR(16) NOT NULL, JOB_NAME VARCHAR(190) NULL, JOB_GROUP VARCHAR(190) NULL, IS_NONCONCURRENT VARCHAR(1) NULL, REQUESTS_RECOVERY VARCHAR(1) NULL, PRIMARY KEY (SCHED_NAME,ENTRY_ID)) ENGINEInnoDB;CREATE TABLE QRTZ_SCHEDULER_STATE ( SCHED_NAME VARCHAR(120) NOT NULL, INSTANCE_NAME VARCHAR(190) NOT NULL, LAST_CHECKIN_TIME BIGINT(13) NOT NULL, CHECKIN_INTERVAL BIGINT(13) NOT NULL, PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)) ENGINEInnoDB;CREATE TABLE QRTZ_LOCKS ( SCHED_NAME VARCHAR(120) NOT NULL, LOCK_NAME VARCHAR(40) NOT NULL, PRIMARY KEY (SCHED_NAME,LOCK_NAME)) ENGINEInnoDB;CREATE INDEX IDX_QRTZ_J_REQ_RECOVERY ON QRTZ_JOB_DETAILS(SCHED_NAME,REQUESTS_RECOVERY); CREATE INDEX IDX_QRTZ_J_GRP ON QRTZ_JOB_DETAILS(SCHED_NAME,JOB_GROUP);CREATE INDEX IDX_QRTZ_T_J ON QRTZ_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); CREATE INDEX IDX_QRTZ_T_JG ON QRTZ_TRIGGERS(SCHED_NAME,JOB_GROUP); CREATE INDEX IDX_QRTZ_T_C ON QRTZ_TRIGGERS(SCHED_NAME,CALENDAR_NAME); CREATE INDEX IDX_QRTZ_T_G ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP); CREATE INDEX IDX_QRTZ_T_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE); CREATE INDEX IDX_QRTZ_T_N_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE); CREATE INDEX IDX_QRTZ_T_N_G_STATE ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE); CREATE INDEX IDX_QRTZ_T_NEXT_FIRE_TIME ON QRTZ_TRIGGERS(SCHED_NAME,NEXT_FIRE_TIME); CREATE INDEX IDX_QRTZ_T_NFT_ST ON QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME); CREATE INDEX IDX_QRTZ_T_NFT_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME); CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE); CREATE INDEX IDX_QRTZ_T_NFT_ST_MISFIRE_GRP ON QRTZ_TRIGGERS(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);CREATE INDEX IDX_QRTZ_FT_TRIG_INST_NAME ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME); CREATE INDEX IDX_QRTZ_FT_INST_JOB_REQ_RCVRY ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY); CREATE INDEX IDX_QRTZ_FT_J_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_NAME,JOB_GROUP); CREATE INDEX IDX_QRTZ_FT_JG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,JOB_GROUP); CREATE INDEX IDX_QRTZ_FT_T_G ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP); CREATE INDEX IDX_QRTZ_FT_TG ON QRTZ_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);commit; 表的说明 表名称说明qrtz_blob_triggersblog类型存储triggersqrtz_calendars以blog类型存储Calendar信息qrtz_cron_triggers存储cron trigger信息qrtz_fired_triggers存储已触发的trigger相关信息qrtz_job_details存储每一个已配置的job detailsqrtz_locks存储悲观锁的信息qrtz_paused_trigger_grps存储已暂停的trigger组信息qrtz_scheduler_state存储Scheduler状态信息qrtz_simple_triggers存储simple trigger信息qrtz_simprop_triggers存储其他几种trigger信息qrtz_triggers存储已配置的trigger信息 创建需要被调度的方法 package com.example.springbootfull.quartztest;import lombok.extern.slf4j.Slf4j; import org.quartz.DisallowConcurrentExecution; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean;import java.time.LocalDateTime; import java.time.format.DateTimeFormatter;/*** DisallowConcurrentExecution : 此标记用在实现Job的类上面,意思是不允许并发执行.* 因为Quartz的是并发操作的要非常注意线程不安全最好加上这个注解以防止导致业务数据错乱*/ Slf4j DisallowConcurrentExecution public class BookTask extends QuartzJobBean {Overrideprotected void executeInternal(JobExecutionContext context) throws JobExecutionException {JobDetail jobDetail context.getJobDetail();log.info(book定时任务-开始执行, 任务名 jobDetail.getKey().getName() ,组名 jobDetail.getKey().getGroup() DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss).format(LocalDateTime.now())); // try { // Thread.sleep(3000); // } catch (InterruptedException e) { // e.printStackTrace(); // }log.info(book定时任务-执行结束, 任务名 jobDetail.getKey().getName() ,组名 jobDetail.getKey().getGroup() DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss).format(LocalDateTime.now()));} }创建相关实体类 package com.example.springbootfull.quartztest.bean;import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat;import java.util.Date;// 使用Data注解自动为该类生成getter、setter、equals、hashCode和toString方法 Data public class QuartzBean {// 任务名称private String jobName;// 任务组的名称private String jobGroupName;// 任务的状态例如运行中、已停止等private String state;// 执行任务的类名通常是一个实现了Job接口的类的全限定名private String jobClass;// 间隔单位例如秒、分钟、小时等private String intervalUnit;// 间隔单位的可读名称例如Seconds、Minutes、Hours等private String intervalUnitName;// 时间间隔的数量例如如果intervalUnit是Minutes这个值可能是5表示每5分钟执行一次private Integer timeInterval;// Cron表达式用于更复杂的任务调度例如每天凌晨1点执行private String cronExpression;// 任务开始时间使用DateTimeFormat和JsonFormat注解来指定日期格式和时区// DateTimeFormat用于Spring MVC绑定表单数据时解析日期// JsonFormat用于JSON序列化/反序列化时处理日期DateTimeFormat(pattern yyyy-MM-dd HH:mm:ss)JsonFormat(pattern yyyy-MM-dd HH:mm:ss, timezone GMT8)private Date startTime;// 任务结束时间格式同上DateTimeFormat(pattern yyyy-MM-dd HH:mm:ss)JsonFormat(pattern yyyy-MM-dd HH:mm:ss, timezone GMT8)private Date endTime;// 任务的描述信息private String description; }创建业务层接口 package com.example.springbootfull.quartztest.service;import com.example.springbootfull.quartztest.bean.QuartzBean; import com.example.springbootfull.quartztest.zdyresult.ResponseResult; import org.springframework.scheduling.TaskScheduler; import org.springframework.stereotype.Service;import java.util.List;public interface IQuartzService {/*** 添加定时任务信息** param quartzBean 定时任务信息*/void save(QuartzBean quartzBean);/*** 移除定时任务--根据任务名称移除** param jobName 任务名*/void delete(String jobName);/*** 移除定时任务** param groupName 组名* param jobName 任务名*/void delete(String jobName, String groupName);/*** 修改定时任务** param quartzBean 任务信息*/void update(QuartzBean quartzBean);/*** 添加任务** param jobName 任务名* return 任务信息*/QuartzBean selectByName(String jobName);/*** 查询单个定时任务信息** param groupName 组名称* param jobName 任务名称* return 查询结果*/QuartzBean selectByName(String jobName, String groupName);/*** 查询定时任务列表** param quartzBean 查询条件* return 查询结果*/ListQuartzBean selectList(QuartzBean quartzBean);/*** 暂停定时任务** param jobName 任务名*/void pause(String jobName);/*** 暂停定时任务** param jobName 任务名* param groupName 组名*/void pause(String jobName, String groupName);/*** 恢复定时任务** param jobName 任务名*/void resume(String jobName);/*** 恢复定时任务** param jobName 任务名* param groupName 组名*/void resume(String jobName, String groupName);/*** 执行定时任务** param jobName 任务名*/void executeJob(String jobName);/*** 执行定时任务** param jobName 任务名* param groupName 组名*/void executeJob(String jobName, String groupName); }创建业务层实现类 package com.example.springbootfull.quartztest.serviceImpl;import com.example.springbootfull.quartztest.bean.QuartzBean; import com.example.springbootfull.quartztest.service.IQuartzService; import lombok.SneakyThrows; import org.quartz.*; import org.quartz.impl.matchers.GroupMatcher; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils;import javax.annotation.Resource; import java.util.*;Service public class QuartzServiceImpl implements IQuartzService {Resourceprivate Scheduler scheduler;/*** 保存一个 Quartz 作业到调度器中。** param quartzBean 包含作业和触发器配置信息的 QuartzBean 对象。* throws SchedulerException 如果在调度作业或触发器时发生错误。* throws ClassNotFoundException 如果找不到指定的作业类。*/OverrideSneakyThrowspublic void save(QuartzBean quartzBean) {// 通过反射获取作业类的 Class 对象Class? extends Job jobClass (Class? extends Job) Class.forName(quartzBean.getJobClass());// 获取作业名称String jobName quartzBean.getJobName();// 获取作业组名称如果没有指定则使用默认组String jobGroupName !StringUtils.hasText(quartzBean.getJobGroupName()) ? Scheduler.DEFAULT_GROUP : quartzBean.getJobGroupName();// 获取触发器组名称通常与作业组名称相同String triggerGroupName !StringUtils.hasText(quartzBean.getJobGroupName()) ? Scheduler.DEFAULT_GROUP : quartzBean.getJobGroupName();// 获取作业开始时间如果没有指定则使用当前时间Date startTime quartzBean.getStartTime() null ? new Date() : quartzBean.getStartTime();// 获取作业结束时间Date endTime quartzBean.getEndTime();// 获取作业描述如果没有指定则使用空字符串String description !StringUtils.hasText(quartzBean.getDescription()) ? : quartzBean.getDescription();// 构建作业详情对象JobDetail jobDetail JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName) // 设置作业名称和组名称.withDescription(description) // 设置作业描述.build();// 检查是否指定了 Cron 表达式if (quartzBean.getCronExpression() ! null quartzBean.getCronExpression().length() 0) {// 如果指定了 Cron 表达式则构建基于 Cron 的触发器Trigger trigger TriggerBuilder.newTrigger().withIdentity(jobName, triggerGroupName) // 设置触发器名称和组名称.startAt(startTime) // 设置触发器开始时间.endAt(endTime) // 设置触发器结束时间可选.withSchedule(CronScheduleBuilder.cronSchedule(quartzBean.getCronExpression()).withMisfireHandlingInstructionDoNothing()) // 设置 Cron 计划和误触发处理策略.build();// 将作业和触发器添加到调度器中scheduler.scheduleJob(jobDetail, trigger);} else {// 如果没有指定 Cron 表达式则构建基于日历间隔的触发器DateBuilder.IntervalUnit cycleUnit DateBuilder.IntervalUnit.valueOf(quartzBean.getIntervalUnit());Integer timeInterval quartzBean.getTimeInterval();Trigger trigger TriggerBuilder.newTrigger().withIdentity(jobName, triggerGroupName) // 设置触发器名称和组名称.startAt(startTime) // 设置触发器开始时间.endAt(endTime) // 设置触发器结束时间可选.withSchedule(CalendarIntervalScheduleBuilder.calendarIntervalSchedule().withInterval(timeInterval, cycleUnit) // 设置间隔计划和单位.withMisfireHandlingInstructionDoNothing()) // 设置误触发处理策略.build();// 将作业和触发器添加到调度器中scheduler.scheduleJob(jobDetail, trigger);}}/*** 移除定时任务--根据任务名称移除*/Overridepublic void delete(String jobName) {delete(jobName, Scheduler.DEFAULT_GROUP);}/*** 移除定时任务*/OverrideSneakyThrowspublic void delete(String jobName, String groupName) {groupName !StringUtils.hasText(groupName) ? Scheduler.DEFAULT_GROUP : groupName;// 指定作业JobJobKey jobKey new JobKey(jobName, groupName);// 指定触发器TriggerKey triggerKey new TriggerKey(jobName, groupName);// 使用scheduler对象暂停与指定TriggerKey相关联的触发器scheduler.pauseTrigger(triggerKey);// 使用scheduler对象暂停与指定JobKey相关联的作业。scheduler.pauseJob(jobKey);// 移除触发器scheduler.unscheduleJob(triggerKey);// 删除任务scheduler.deleteJob(jobKey);}/*** 修改定时任务*/OverrideSneakyThrowspublic void update(QuartzBean quartzBean) {delete(quartzBean.getJobName());save(quartzBean);}/*** 查询单个定时任务*/Overridepublic QuartzBean selectByName(String jobName) {return selectByName(jobName, Scheduler.DEFAULT_GROUP);}/*** 查询单个定时任务*/OverrideSneakyThrowspublic QuartzBean selectByName(String jobName, String groupName) {groupName !StringUtils.hasText(groupName) ? Scheduler.DEFAULT_GROUP : groupName;QuartzBean quartzBean new QuartzBean();JobKey jobKey new JobKey(jobName, groupName);JobDetail jobDetail scheduler.getJobDetail(jobKey);quartzBean.setJobName(jobName);quartzBean.setJobGroupName(groupName);setJob(jobKey, quartzBean, jobDetail);return quartzBean;}/*** 查询定时任务列表*/OverrideSneakyThrowspublic ListQuartzBean selectList(QuartzBean quartzBean) {ListQuartzBean quartzBeans new ArrayList();GroupMatcherJobKey mathcher GroupMatcher.anyJobGroup();String keyWord quartzBean.getJobName();SetJobKey jobKeys scheduler.getJobKeys(mathcher);if (jobKeysnull) {return new ArrayList();}for (JobKey jobKey : jobKeys) {if (StringUtils.hasText(keyWord) !jobKey.getName().contains(keyWord)) {continue;}QuartzBean quartzBean2 new QuartzBean();JobDetail jobDetail scheduler.getJobDetail(jobKey);quartzBean2.setJobName(jobKey.getName());quartzBean2.setJobGroupName(jobKey.getGroup());List? extends Trigger triggers setJob(jobKey, quartzBean2, jobDetail);quartzBean2.setState(scheduler.getTriggerState(triggers.get(0).getKey()).name());quartzBeans.add(quartzBean2);}return quartzBeans;}/*** 暂停定时任务*/Overridepublic void pause(String jobName) {pause(jobName, Scheduler.DEFAULT_GROUP);}/*** 暂停定时任务*/OverrideSneakyThrowspublic void pause(String jobName, String groupName) {groupName !StringUtils.hasText(groupName) ? Scheduler.DEFAULT_GROUP : groupName;TriggerKey triggerKey new TriggerKey(jobName, groupName);scheduler.pauseTrigger(triggerKey);JobKey jobKey new JobKey(jobName);scheduler.pauseJob(jobKey);}/*** 恢复定时任务*/Overridepublic void resume(String jobName) {resume(jobName, Scheduler.DEFAULT_GROUP);}/*** 恢复定时任务*/OverrideSneakyThrowspublic void resume(String jobName, String groupName) {//检查groupName是否有有效的文本内容,没有有效的则用默认的组名groupName !StringUtils.hasText(groupName) ? Scheduler.DEFAULT_GROUP : groupName;TriggerKey triggerKey new TriggerKey(jobName, groupName);scheduler.resumeTrigger(triggerKey);JobKey jobKey new JobKey(jobName);scheduler.resumeJob(jobKey);}/*** 执行定时任务*/Overridepublic void executeJob(String jobName) {executeJob(jobName, Scheduler.DEFAULT_GROUP);}/*** 执行定时任务*/OverrideSneakyThrowspublic void executeJob(String jobName, String groupName) {//检查groupName是否有有效的文本内容,没有有效的则用默认的组名groupName !StringUtils.hasText(groupName) ? Scheduler.DEFAULT_GROUP : groupName;JobKey jobKey new JobKey(jobName, groupName);scheduler.triggerJob(jobKey);}/*** 根据提供的JobKey和JobDetail信息设置QuartzBean的属性并返回与该作业关联的触发器列表。** param jobKey 作业的唯一标识包括作业名称和作业组名。* param quartzBean 用于封装Quartz作业相关属性的对象。* param jobDetail 包含作业详细信息的JobDetail对象。* return 与指定作业关联的触发器列表列表中的触发器类型可能是CronTrigger或CalendarIntervalTrigger等。* throws SchedulerException 如果在获取触发器列表时发生错误。*/private List? extends Trigger setJob(JobKey jobKey, QuartzBean quartzBean, JobDetail jobDetail) throws SchedulerException {// 设置作业类名和描述quartzBean.setJobClass(jobDetail.getJobClass().getName());quartzBean.setDescription(jobDetail.getDescription());// 尝试获取与指定作业关联的触发器列表List? extends Trigger triggers scheduler.getTriggersOfJob(jobKey);// 检查触发器列表是否为空或没有元素if (triggers null || triggers.isEmpty()) {// 根据业务需求可以选择抛出异常、返回空列表或进行其他处理// 这里为了简化直接返回空列表注意这可能会隐藏潜在的问题return Collections.emptyList();}// 获取第一个触发器注意这里假设至少有一个触发器Trigger trigger triggers.get(0);// 设置触发器的开始时间和结束时间quartzBean.setStartTime(trigger.getStartTime());quartzBean.setEndTime(trigger.getEndTime());// 根据触发器的具体类型设置相应的属性if (trigger instanceof CronTrigger) {// 如果是CronTrigger类型则获取Cron表达式CronTrigger cronTrigger (CronTrigger) trigger; // 使用instanceof后可以直接强制转换无需再次检查类型quartzBean.setCronExpression(cronTrigger.getCronExpression());} else if (trigger instanceof CalendarIntervalTrigger) {// 如果是CalendarIntervalTrigger类型则获取重复间隔单位和重复间隔时间CalendarIntervalTrigger calendarIntervalTrigger (CalendarIntervalTrigger) trigger;quartzBean.setIntervalUnit(calendarIntervalTrigger.getRepeatIntervalUnit().toString());quartzBean.setTimeInterval(calendarIntervalTrigger.getRepeatInterval());}// 注意这里只处理了两种类型的触发器如果有其他类型的触发器需要添加相应的处理逻辑// 返回与指定作业关联的触发器列表return triggers;}} 控制层类 package com.example.springbootfull.quartztest.controller;import com.example.springbootfull.quartztest.bean.QuartzBean; import com.example.springbootfull.quartztest.service.IQuartzService; import com.example.springbootfull.quartztest.zdyresult.ResponseResult; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*;import java.util.List;RestController RequestMapping(taskScheduler) public class QuartzController {Autowiredprivate IQuartzService quartzService;/*** 添加定时任务信息** param quartzBean 定时任务信息* return ReturnModel 添加定时任务*/PostMapping(value save)public ResponseResultString save(RequestBody QuartzBean quartzBean) { // { // jobName: bookTask, // description: 书籍定时任务, // // startTime: 2024-01-12 15:20:00, // // endTime: 2024-01-13 00:00:00, // jobClass: com.example.springbootfull.quartztest.BookTask, // cronExpression: */10 * * * * ? // }quartzService.save(quartzBean);return ResponseResult.success(quartzBean.getJobName());}/*** 移除定时任务** param quartzBean 定时任务信息* return ReturnModel 移除定时任务*/PostMapping(value /delete)public ResponseResultString delete(RequestBody QuartzBean quartzBean) { // { // jobName: bookTask // }quartzService.delete(quartzBean.getJobName());return ResponseResult.success(quartzBean.getJobName());}/*** 修改定时任务** param quartzBean 定时任务信息* return ReturnModel 修改定时任务*/PostMapping(value update)public ResponseResultString update(RequestBody QuartzBean quartzBean) { // { // jobName:bookTask, // description:1, // jobTypeRadio:expression, // startTime:2024-01-13 14:00:00, // endTime:, // jobClass:com.example.demo.system.controller.BookTask, // cronExpression:*/30 * * * * ? // }quartzService.update(quartzBean);return ResponseResult.success(quartzBean.getJobName());}/*** 暂停定时任务** param quartzBean 定时任务名称* return ReturnModel 暂停定时任务*/PostMapping(value pause)public ResponseResultString pause(RequestBody QuartzBean quartzBean) { // { // jobName: bookTask2 // }quartzService.pause(quartzBean.getJobName());return ResponseResult.success(quartzBean.getJobName());}/*** 恢复定时任务** param quartzBean 定时任务名称* return ReturnModel 恢复定时任务*/PostMapping(value resume)public ResponseResultString resume(RequestBody QuartzBean quartzBean) { // { // jobName: bookTask2 // }quartzService.resume(quartzBean.getJobName());return ResponseResult.success(quartzBean.getJobName());}/*** 执行定时任务** param quartzBean 定时任务名称* return ReturnModel 执行定时任务*/PostMapping(value executeJob)public ResponseResultString executeJob(RequestBody QuartzBean quartzBean) { // { // jobName: bookTask2 // }quartzService.executeJob(quartzBean.getJobName());return ResponseResult.success(quartzBean.getJobName());}/*** 查询单个定时任务信息** param jobName 任务名称* return ReturnModel 查询单个定时任务信息*/GetMapping(value selectByName)public ResponseResultQuartzBean selectByName(RequestParam(jobName) String jobName) {QuartzBean quartzBean quartzService.selectByName(jobName);return ResponseResult.success(quartzBean);}/*** 查询定时任务列表** param quartzBean 查询条件* return ReturnModel 查询定时任务列表*/PostMapping(value selectList)public ResponseResultListQuartzBean selectList(RequestBody QuartzBean quartzBean) { // { // jobName: // }ListQuartzBean quartzBeans quartzService.selectList(quartzBean);return ResponseResult.success(quartzBeans);} }测试结果 我这边只测试一下查看 参考文章 【1】【QUARTZ】springbootquartz动态配置定时任务
http://www.dnsts.com.cn/news/266651.html

相关文章:

  • 专业品牌网站建设价格seo视频教程汇总
  • 淘宝客网站怎么批量采集淘宝商品方维采集淘宝数据思路关于企业网站建设的建议
  • 手机客户端网站建设wordpress 注册超时
  • 网站流量统计工具咸阳市住房和城乡建设局网站
  • 长沙网站网站建设小程序直播系统开发
  • 惠州市网站制作有限公司荆州seo公司
  • 网页制作期末作业网站网络系统设计
  • 北京公司网站制作方法seo交流qq群
  • 济南网站定制制作做网站需要注册什么公司
  • 茶山做网站网站页脚怎么做
  • 网站建设的重要指标曲靖网站开发
  • 网站里面的图片做桌面不清晰七牛 wordpress 节省空间
  • 阿里云网站空间主机云开发参数
  • logo网站设计素材贷款公司如何做网站
  • 服饰网站建设目的亚马逊雨林
  • 推广普通话手抄报句子什么是搜索引擎优化的核心
  • 如何做单网页网站广州最繁华的地方在哪里
  • 网站查看哪个平台可以免费推广
  • 山西省城乡住房和建设厅网站首页app开发企业网站建设
  • 网站宝建站网络营销方式论文
  • seo整站优化什么价格技术共享平台
  • 网站建设公司织梦模板上海二手房
  • 网页做的很美的网站网站标题导航栏
  • 建设银行梅州分行网站五华县建设工程交易中心网站
  • 四川建设厅网站入川备案文件营销网建
  • 宜宾市建设工程质量监督站网站wordpress 侧边栏头像
  • 邵东做网站大连是谁建设的
  • 中国联通网站备案管理系统深圳 营销型网站建设
  • x域名免费网站wordpress获取自定义栏目
  • openwrt 网站开发大连网站制作方法