西直门网站建设,打不开wordpress,营销软件哪个好,汕头模板做网站springboot整合quartz#xff0c;实现数据库方式执行定时任务。把定时任务信息存进数据库#xff0c;项目启动后自动执行定时任务。
1.引入依赖包#xff1a; dependency groupIdorg.springframework.boot/groupId ar…springboot整合quartz实现数据库方式执行定时任务。把定时任务信息存进数据库项目启动后自动执行定时任务。
1.引入依赖包 dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-quartz/artifactId /dependency 2.配置yml spring: # quartz quartz: #相关属性配置 properties: org: quartz: scheduler: instanceName: DefaultQuartzScheduler instanceId: AUTO jobStore: class: org.quartz.impl.jdbcjobstore.JobStoreTX driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate tablePrefix: QRTZ_ isClustered: false clusterCheckinInterval: 10000 #以指示JDBCJobStore将JobDataMaps中的所有值都作为字符串因此可以作为名称 #- 值对存储而不是在BLOB列中以其序列化形式存储更多复杂的对象。 #从长远来看这是更安全的因为您避免了将非String类序列化为BLOB的类版本问题。 useProperties: false threadPool: class: org.quartz.simpl.SimpleThreadPool threadCount: 10 threadPriority: 5 threadsInheritContextClassLoaderOfInitializingThread: true # 数据库方式 job-store-type: jdbc datasource: username: root password: 123456 url: jdbc:mysql://localhost:3306/quartz_test?useUnicodetruecharacterEncodingutf-8useSSLtrueserverTimezoneUTC driver-class-name: com.mysql.cj.jdbc.Driver server: port: 8080 3.后端编码
controller层 Controller RequestMapping(value /job) Slf4j public class JobController { Autowired private IJobService jobService; PostMapping(value /add) ResponseBody public Result addJob(RequestBody JobInfo jobInfo) { return jobService.addJob(jobInfo); } GetMapping(value /getAllJobs) ResponseBody public ListJobInfo getAllJobs() { return jobService.getAllJobs(); } PostMapping(value /pause) ResponseBody public Result pauseJob(String name, String group) { return jobService.pauseJob(name,group) ? Result.success() : Result.error(); } PostMapping(value /resume) ResponseBody public Result resumeJob(String name, String group) { return jobService.resumeJob(name,group) ? Result.success() : Result.error(); } PostMapping(value /reschedule) ResponseBody public Result reScheduleJob(String name, String group, String cron) { return jobService.reScheduleJob(name, group, cron) ? Result.success() : Result.error(); } PostMapping(value /delete) ResponseBody public Result deleteJob(String name, String group) { return jobService.deleteJob(name,group) ? Result.success() : Result.error(); } /** * description 校验是否是合法cron表达式 * param cron * return com.cxh.cxhquartz.common.Result **/ PostMapping(value /checkCron) ResponseBody public Result checkCron(String cron) { boolean valide false; try { valide CronExpression.isValidExpression(cron); }catch (Exception e){ log.error(e.getMessage()); } return valide ? Result.success() : Result.error(); } } service层 public interface IJobService { /** * description 查询所有任务 * param * return java.util.Listcom.cxh.cxhquartz.quartz.JobInfo **/ ListJobInfo getAllJobs(); /** * description 恢复任务 * param jobName * Param jobGroup * return boolean **/ boolean resumeJob(String jobName,String jobGroup); /** * description 停止任务 * param jobName * Param jobGroup * return boolean **/ boolean pauseJob(String jobName,String jobGroup); /** * description 修改任务执行周期表达式 * param jobName * Param jobGroup * Param cronExpression * return boolean **/ boolean reScheduleJob(String jobName,String jobGroup,String cronExpression); /** * description 删除任务 * param jobName * Param jobGroup * return boolean **/ boolean deleteJob(String jobName,String jobGroup); /** * description 新增任务 * param jobInfo * return int **/ Result addJob(JobInfo jobInfo); /** * description 判断任务是否存在 * param jobKey * return int **/ int isJobExist(JobKey jobKey); } Slf4j Service public class JobServiceImpl implements IJobService { Autowired private Scheduler scheduler; Override public ListJobInfo getAllJobs() { ListJobInfo jobInfoList new ArrayList(); try{ ListString groupList scheduler.getJobGroupNames(); for(String group : groupList){ GroupMatcherJobKey groupMatcher GroupMatcher.groupEquals(group); SetJobKey jobKeySet scheduler.getJobKeys(groupMatcher); for(JobKey jobKey : jobKeySet){ JobInfo jobInfo new JobInfo(); JobDetail jobDetail scheduler.getJobDetail(jobKey); jobInfo.setJobname(jobKey.getName()); jobInfo.setJobgroup(jobKey.getGroup()); jobInfo.setJobclassname(jobDetail.getJobClass().getName()); Trigger trigger scheduler.getTrigger(TriggerKey.triggerKey(jobKey.getName(), jobKey.getGroup())); if(trigger ! null){ Trigger.TriggerState state scheduler.getTriggerState(TriggerKey.triggerKey(jobKey.getName(), jobKey.getGroup())); jobInfo.setTriggername(jobKey.getName()); jobInfo.setTriggergroup(jobKey.getGroup()); try{ CronTrigger cronTrigger (CronTrigger) trigger; jobInfo.setCronexpression(cronTrigger.getCronExpression()); } catch (Exception e){ log.error(e.getMessage()); } if(trigger.getNextFireTime() ! null){ SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); jobInfo.setNextfiretime(sdf.format(trigger.getNextFireTime())); } jobInfo.setDescription(jobDetail.getDescription()); jobInfo.setState(state.name()); jobInfo.setId(UUID.randomUUID().toString()); jobInfoList.add(jobInfo); } else { jobInfo.setState(OVER); jobInfo.setId(UUID.randomUUID().toString()); jobInfoList.add(jobInfo); } } } } catch (Exception e){ log.error(e.getMessage()); } return jobInfoList; } Override public boolean resumeJob(String jobName, String jobGroup) { boolean flag true; try{ scheduler.resumeJob(JobKey.jobKey(jobName, jobGroup)); } catch (Exception e){ flag false; log.error(e.getMessage()); } return flag; } Override public boolean pauseJob(String jobName, String jobGroup) { boolean flag true; try{ scheduler.pauseJob(JobKey.jobKey(jobName, jobGroup)); } catch (Exception e){ flag false; log.error(e.getMessage()); } return flag; } Override public boolean reScheduleJob(String jobName, String jobGroup, String cronExpression) { boolean flag true; try{ Trigger.TriggerState state scheduler.getTriggerState(TriggerKey.triggerKey(jobName, jobGroup)); CronTrigger cronTrigger (CronTrigger) scheduler.getTrigger(TriggerKey.triggerKey(jobName, jobGroup)); if(cronTrigger ! null cronExpression ! null !cronTrigger.getCronExpression().equals(cronExpression)){ CronTrigger cronTriggerNew TriggerBuilder.newTrigger().withIdentity(jobName, jobGroup).withSchedule(CronScheduleBuilder.cronSchedule(cronExpression)).build(); scheduler.rescheduleJob(TriggerKey.triggerKey(jobName, jobGroup), cronTriggerNew); if(state.name().equals(PAUSED)){ this.pauseJob(jobName, jobGroup); } } } catch (Exception e){ flag false; log.error(e.getMessage()); } return flag; } Override public boolean deleteJob(String jobName, String jobGroup) { boolean flag true; try{ List? extends Trigger triggerList scheduler.getTriggersOfJob(JobKey.jobKey(jobName, jobGroup)); if(triggerList.size() 0){ if(!PAUSED.equals(scheduler.getTriggerState(TriggerKey.triggerKey(jobName, jobGroup)).name())){ scheduler.pauseTrigger(TriggerKey.triggerKey(jobName, jobGroup)); } scheduler.unscheduleJob(TriggerKey.triggerKey(jobName, jobGroup)); } scheduler.deleteJob(JobKey.jobKey(jobName, jobGroup)); } catch (Exception e){ flag false; log.error(e.getMessage()); } return flag; } Override public Result addJob(JobInfo jobInfo) { int isJobExist this.isJobExist(JobKey.jobKey(jobInfo.getJobname(), jobInfo.getJobgroup())); if(isJobExist 1){ return Result.error(任务已存在); } try{ JobDetail jobDetail null; if(isJobExist 0){ jobDetail scheduler.getJobDetail(JobKey.jobKey(jobInfo.getJobname(), jobInfo.getJobgroup())); } else if(isJobExist -1){ jobDetail JobBuilder.newJob( (Class? extends Job) Class.forName(jobInfo.getJobclassname())) .withIdentity(jobInfo.getJobname(), jobInfo.getJobgroup()) .withDescription(jobInfo.getDescription()) .storeDurably().build(); } //如果jobInfo的cron表达式为空则创建常规任务反之创建周期任务 if(jobInfo.getCronexpression() ! null){ CronTrigger cronTrigger TriggerBuilder.newTrigger().withIdentity(jobInfo.getTriggername(), jobInfo.getTriggergroup()) .withSchedule(CronScheduleBuilder.cronSchedule(jobInfo.getCronexpression())) .build(); scheduler.scheduleJob(jobDetail, cronTrigger); } else { SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); Trigger trigger TriggerBuilder.newTrigger().withIdentity(jobInfo.getJobname(), jobInfo.getJobgroup()) .startAt(sdf.parse(jobInfo.getNextfiretime())) .withSchedule(SimpleScheduleBuilder.simpleSchedule().withRepeatCount(0)) .build(); scheduler.scheduleJob(jobDetail, trigger); } } catch (SchedulerException e){ log.error(e.getMessage()); return Result.error(添加任务失败); } catch (ParseException e){ log.error(e.getMessage()); return Result.error(时间转换出错); } catch (Exception e){ log.error(e.getMessage()); return Result.error(e.getMessage()); } return Result.success(添加任务成功); } Override public int isJobExist(JobKey jobKey) { int flag -1; try{ JobDetail jobDetail scheduler.getJobDetail(jobKey); List? extends Trigger triggers scheduler.getTriggersOfJob(jobKey); if(jobDetail ! null triggers.size() 0){ flag 1; } else if(jobDetail ! null triggers.size() 0){ flag 0; } } catch (Exception e){ flag -1; log.error(e.getMessage()); } return flag; } } entity层 Data public class JobInfo implements Serializable { private String id; private String jobname; private String jobgroup; private String jobclassname; private String triggername; private String triggergroup; private String cronexpression; private String description; private String prefiretime; private String nextfiretime; private String state; } 定时任务 Slf4j public class DemoJob implements Job { Override public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { JobDetail jobDetail jobExecutionContext.getJobDetail(); log.info(任务名 jobDetail.getKey().getName() ,组名 jobDetail.getKey().getGroup() ------执行的定时任务工作内容); } } 4.创建数据库表quartz保存定时任务信息表 5.运行项目打开postman发起请求 6.运行结果 文章转载自: http://www.morning.zsrjn.cn.gov.cn.zsrjn.cn http://www.morning.ljdd.cn.gov.cn.ljdd.cn http://www.morning.lmnbp.cn.gov.cn.lmnbp.cn http://www.morning.yckwt.cn.gov.cn.yckwt.cn http://www.morning.nyplp.cn.gov.cn.nyplp.cn http://www.morning.gpkjx.cn.gov.cn.gpkjx.cn http://www.morning.bqxxq.cn.gov.cn.bqxxq.cn http://www.morning.gcszn.cn.gov.cn.gcszn.cn http://www.morning.c7630.cn.gov.cn.c7630.cn http://www.morning.lyzwdt.com.gov.cn.lyzwdt.com http://www.morning.ymwrs.cn.gov.cn.ymwrs.cn http://www.morning.lzqnj.cn.gov.cn.lzqnj.cn http://www.morning.dcdhj.cn.gov.cn.dcdhj.cn http://www.morning.sfmqm.cn.gov.cn.sfmqm.cn http://www.morning.chjnb.cn.gov.cn.chjnb.cn http://www.morning.fcwb.cn.gov.cn.fcwb.cn http://www.morning.ey3h2d.cn.gov.cn.ey3h2d.cn http://www.morning.rkypb.cn.gov.cn.rkypb.cn http://www.morning.lizimc.com.gov.cn.lizimc.com http://www.morning.ctrkh.cn.gov.cn.ctrkh.cn http://www.morning.xhfky.cn.gov.cn.xhfky.cn http://www.morning.srrrz.cn.gov.cn.srrrz.cn http://www.morning.dmlgq.cn.gov.cn.dmlgq.cn http://www.morning.rnnts.cn.gov.cn.rnnts.cn http://www.morning.zdnrb.cn.gov.cn.zdnrb.cn http://www.morning.bgdk.cn.gov.cn.bgdk.cn http://www.morning.pmhln.cn.gov.cn.pmhln.cn http://www.morning.bhjyh.cn.gov.cn.bhjyh.cn http://www.morning.qwfl.cn.gov.cn.qwfl.cn http://www.morning.kmprl.cn.gov.cn.kmprl.cn http://www.morning.kwhrq.cn.gov.cn.kwhrq.cn http://www.morning.lbzgt.cn.gov.cn.lbzgt.cn http://www.morning.kjdxh.cn.gov.cn.kjdxh.cn http://www.morning.sjmxh.cn.gov.cn.sjmxh.cn http://www.morning.slqzb.cn.gov.cn.slqzb.cn http://www.morning.zwgrf.cn.gov.cn.zwgrf.cn http://www.morning.jydky.cn.gov.cn.jydky.cn http://www.morning.yprjy.cn.gov.cn.yprjy.cn http://www.morning.dpgdj.cn.gov.cn.dpgdj.cn http://www.morning.pqchr.cn.gov.cn.pqchr.cn http://www.morning.lonlie.com.gov.cn.lonlie.com http://www.morning.qwfq.cn.gov.cn.qwfq.cn http://www.morning.slfmp.cn.gov.cn.slfmp.cn http://www.morning.kngqd.cn.gov.cn.kngqd.cn http://www.morning.bqrd.cn.gov.cn.bqrd.cn http://www.morning.rgksz.cn.gov.cn.rgksz.cn http://www.morning.glpxx.cn.gov.cn.glpxx.cn http://www.morning.jbmbj.cn.gov.cn.jbmbj.cn http://www.morning.rdmz.cn.gov.cn.rdmz.cn http://www.morning.kwjyt.cn.gov.cn.kwjyt.cn http://www.morning.pkggl.cn.gov.cn.pkggl.cn http://www.morning.ywqw.cn.gov.cn.ywqw.cn http://www.morning.dpplr.cn.gov.cn.dpplr.cn http://www.morning.kfjnx.cn.gov.cn.kfjnx.cn http://www.morning.njqpg.cn.gov.cn.njqpg.cn http://www.morning.rwqk.cn.gov.cn.rwqk.cn http://www.morning.mzrqj.cn.gov.cn.mzrqj.cn http://www.morning.jfjbl.cn.gov.cn.jfjbl.cn http://www.morning.xqgfy.cn.gov.cn.xqgfy.cn http://www.morning.rtqyy.cn.gov.cn.rtqyy.cn http://www.morning.jxmjr.cn.gov.cn.jxmjr.cn http://www.morning.znrgq.cn.gov.cn.znrgq.cn http://www.morning.zplzj.cn.gov.cn.zplzj.cn http://www.morning.dkqbc.cn.gov.cn.dkqbc.cn http://www.morning.yrlfy.cn.gov.cn.yrlfy.cn http://www.morning.nqxdg.cn.gov.cn.nqxdg.cn http://www.morning.ykrkb.cn.gov.cn.ykrkb.cn http://www.morning.rnqrl.cn.gov.cn.rnqrl.cn http://www.morning.rcww.cn.gov.cn.rcww.cn http://www.morning.zrkws.cn.gov.cn.zrkws.cn http://www.morning.yrjym.cn.gov.cn.yrjym.cn http://www.morning.dodoking.cn.gov.cn.dodoking.cn http://www.morning.guanszz.com.gov.cn.guanszz.com http://www.morning.rlrxh.cn.gov.cn.rlrxh.cn http://www.morning.krswn.cn.gov.cn.krswn.cn http://www.morning.wjxtq.cn.gov.cn.wjxtq.cn http://www.morning.krklj.cn.gov.cn.krklj.cn http://www.morning.dfwkn.cn.gov.cn.dfwkn.cn http://www.morning.wnjrf.cn.gov.cn.wnjrf.cn http://www.morning.ckhpg.cn.gov.cn.ckhpg.cn