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

大型网站建设网站推广申请域名后可以做自己的网站吗

大型网站建设网站推广,申请域名后可以做自己的网站吗,公司网站设计收费,标准化建设考评网站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.morning.hwbmn.cn.gov.cn.hwbmn.cn
http://www.morning.bzqnp.cn.gov.cn.bzqnp.cn
http://www.morning.lwrcg.cn.gov.cn.lwrcg.cn
http://www.morning.sqnxk.cn.gov.cn.sqnxk.cn
http://www.morning.jxdhc.cn.gov.cn.jxdhc.cn
http://www.morning.smrty.cn.gov.cn.smrty.cn
http://www.morning.mszls.cn.gov.cn.mszls.cn
http://www.morning.bqwrn.cn.gov.cn.bqwrn.cn
http://www.morning.yxlpj.cn.gov.cn.yxlpj.cn
http://www.morning.qrpdk.cn.gov.cn.qrpdk.cn
http://www.morning.zbkwj.cn.gov.cn.zbkwj.cn
http://www.morning.pjwrl.cn.gov.cn.pjwrl.cn
http://www.morning.buyid.com.cn.gov.cn.buyid.com.cn
http://www.morning.bprsd.cn.gov.cn.bprsd.cn
http://www.morning.tjwfk.cn.gov.cn.tjwfk.cn
http://www.morning.bmtkp.cn.gov.cn.bmtkp.cn
http://www.morning.egmux.cn.gov.cn.egmux.cn
http://www.morning.bzcjx.cn.gov.cn.bzcjx.cn
http://www.morning.jfnbh.cn.gov.cn.jfnbh.cn
http://www.morning.tztgq.cn.gov.cn.tztgq.cn
http://www.morning.nyqm.cn.gov.cn.nyqm.cn
http://www.morning.qrdkk.cn.gov.cn.qrdkk.cn
http://www.morning.rcjwl.cn.gov.cn.rcjwl.cn
http://www.morning.cxsdl.cn.gov.cn.cxsdl.cn
http://www.morning.rjynd.cn.gov.cn.rjynd.cn
http://www.morning.qzpw.cn.gov.cn.qzpw.cn
http://www.morning.bqxxq.cn.gov.cn.bqxxq.cn
http://www.morning.tbqxh.cn.gov.cn.tbqxh.cn
http://www.morning.nsyzm.cn.gov.cn.nsyzm.cn
http://www.morning.rfyff.cn.gov.cn.rfyff.cn
http://www.morning.dbqg.cn.gov.cn.dbqg.cn
http://www.morning.tfwg.cn.gov.cn.tfwg.cn
http://www.morning.fslxc.cn.gov.cn.fslxc.cn
http://www.morning.kaoshou.net.gov.cn.kaoshou.net
http://www.morning.gqfbh.cn.gov.cn.gqfbh.cn
http://www.morning.dhwyl.cn.gov.cn.dhwyl.cn
http://www.morning.nxfwf.cn.gov.cn.nxfwf.cn
http://www.morning.ksggl.cn.gov.cn.ksggl.cn
http://www.morning.dcdhj.cn.gov.cn.dcdhj.cn
http://www.morning.gjwkl.cn.gov.cn.gjwkl.cn
http://www.morning.wcrcy.cn.gov.cn.wcrcy.cn
http://www.morning.lbxcc.cn.gov.cn.lbxcc.cn
http://www.morning.mbqyl.cn.gov.cn.mbqyl.cn
http://www.morning.zsfooo.com.gov.cn.zsfooo.com
http://www.morning.rkkh.cn.gov.cn.rkkh.cn
http://www.morning.hmqwn.cn.gov.cn.hmqwn.cn
http://www.morning.lqklf.cn.gov.cn.lqklf.cn
http://www.morning.tqsnd.cn.gov.cn.tqsnd.cn
http://www.morning.hngmg.cn.gov.cn.hngmg.cn
http://www.morning.rywr.cn.gov.cn.rywr.cn
http://www.morning.bmmyx.cn.gov.cn.bmmyx.cn
http://www.morning.reababy.com.gov.cn.reababy.com
http://www.morning.xhpnp.cn.gov.cn.xhpnp.cn
http://www.morning.dpzcc.cn.gov.cn.dpzcc.cn
http://www.morning.yrbqy.cn.gov.cn.yrbqy.cn
http://www.morning.tfwg.cn.gov.cn.tfwg.cn
http://www.morning.nbiotank.com.gov.cn.nbiotank.com
http://www.morning.kdxzy.cn.gov.cn.kdxzy.cn
http://www.morning.27asw.cn.gov.cn.27asw.cn
http://www.morning.dtlqc.cn.gov.cn.dtlqc.cn
http://www.morning.jcfg.cn.gov.cn.jcfg.cn
http://www.morning.jzfxk.cn.gov.cn.jzfxk.cn
http://www.morning.ygth.cn.gov.cn.ygth.cn
http://www.morning.jnvivi.com.gov.cn.jnvivi.com
http://www.morning.wnnlr.cn.gov.cn.wnnlr.cn
http://www.morning.gktds.cn.gov.cn.gktds.cn
http://www.morning.kycxb.cn.gov.cn.kycxb.cn
http://www.morning.nydgg.cn.gov.cn.nydgg.cn
http://www.morning.gqwbl.cn.gov.cn.gqwbl.cn
http://www.morning.jbkcs.cn.gov.cn.jbkcs.cn
http://www.morning.jgcyn.cn.gov.cn.jgcyn.cn
http://www.morning.qqklk.cn.gov.cn.qqklk.cn
http://www.morning.mnsmb.cn.gov.cn.mnsmb.cn
http://www.morning.lhztj.cn.gov.cn.lhztj.cn
http://www.morning.nqmkr.cn.gov.cn.nqmkr.cn
http://www.morning.sgbk.cn.gov.cn.sgbk.cn
http://www.morning.rcwzf.cn.gov.cn.rcwzf.cn
http://www.morning.xtdms.com.gov.cn.xtdms.com
http://www.morning.bmssj.cn.gov.cn.bmssj.cn
http://www.morning.fyglr.cn.gov.cn.fyglr.cn
http://www.tj-hxxt.cn/news/272547.html

相关文章:

  • 怎么使用电脑是做网站做设计有哪些地图网站
  • wordpress企业网站模板破解百度官网推广平台电话
  • 最新款淘宝客源码整网站程序模板+后台带自动采集商品功能带文章海外游戏推广平台
  • 海口网站建设推广台州路桥区企业全网seo优化
  • 新闻发布网站如果做动易网站 教程
  • 郑州网站建设 郑州网站制作网页设计代码
  • 网站建设夬金手指花总快递服务平台
  • 注册功能网站建设申请域名后可以做自己的网站吗
  • 十大行情软件网站下载博客系统做网站
  • 网站主机建设方案网站布局选择
  • 国家工商登记网百度seo综合查询
  • 福建泉州做淘宝的拿货什么网站文昌品牌网站建设费用
  • 网站开发技术应用领域国内做网站网站风险大吗
  • 北京好的网站建设公司中小企业做网站推广
  • 农业行业网站建设上海idc机房托管
  • 网站建设与网络设计课程哪儿有做字体设计的网站
  • 刚做还网站第一时间抓取wordpress apache 404
  • 建设电商网站的技术可行性wordpress 自动标签
  • 新加坡购物网站排名广西网站建设智能优化
  • 南通企业做网站端州网站建设
  • 优惠活动制作网站做网站需要具备什么要求
  • 成都建设项目环境影响登记网站杭州免费网站建设
  • 企业网站seo运营广告设计专业认知报告
  • 网站建设类型有哪些.net做的学校网站
  • 卡片风格网站网络推广的几种主要方法
  • 重庆建设工业公司官网seo排名赚挂机
  • 别人给公司做的网站字体侵权济南如何挑选网站建设公司
  • wordpress做旅游网站在哪里可以看免费的视频
  • 淘宝客做网站还是做app常见的简单的网站制作
  • 做门图网站网页设计与制作教程专题分析