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

北京网站建设华网天下网站建设公司创业

北京网站建设华网天下,网站建设公司创业,在线生成网站,西安市在建工程项目quartz是一个开源的作业调度框架#xff0c;本文就是介绍下springboot框架下继承quartz的一些使用示例首先我们需要添加quartz的spring-boot-starter-quartz依赖org.springframework.bootspring-boot-starter-quartz我们需要做一些配置。quartz提供了基于内存(MEMORY)和基于jd…quartz是一个开源的作业调度框架本文就是介绍下springboot框架下继承quartz的一些使用示例首先我们需要添加quartz的spring-boot-starter-quartz依赖org.springframework.bootspring-boot-starter-quartz我们需要做一些配置。quartz提供了基于内存(MEMORY)和基于jdbc的两种任务存储方式。具体的配置可参考下面的示例spring: quartz: jdbc: initialize-schema: never job-store-type: JDBC properties: org: quartz: scheduler: instanceName: myQuartzCluster instanceId: AUTO jobstore: class: org.quartz.impl.jdbcjobstore.JobStoreTX driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate tablePrefix: qrtz_ isClustered: true clusterCheckinInterval: 10000 useProperties: false threadPool: class: org.quartz.simpl.SimpleThreadPool threadCount: 5 threadPriority: 5 threadsInheritContextClassLoaderOfInitializingThread: true需要注意的是如果是集群部署而且定时任务同时只能一个实例运行的话需要配置成jdbc方式这样就可以用到数据库的锁。MEMORY这种方式建议用于开发环境测试不建议用于生产环境。如果是使用jdbc的方式quartz提供了不同数据库的建表语句。可以在quartz的jar包中找到具体路径是org.quartz.impl.jdbcjobstore定时任务的类需要继承自QuartzJobBean并重写 executeInternal方法。package com.xchaset.quartz.schedule.task;import com.xchaset.quartz.annotation.MyScheduled;import lombok.extern.slf4j.Slf4j;import org.quartz.DisallowConcurrentExecution;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.springframework.scheduling.quartz.QuartzJobBean;import org.springframework.stereotype.Service;ServiceSlf4jDisallowConcurrentExecutionMyScheduled(name EmailTask,description email schedule task,cronExpression 0 0/2 * * * ?)public class EmailTask extends QuartzJobBean { Override protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { log.info({} is execute!,this.getClass().getSimpleName()); }}DisallowConcurrentExecution注解可以控制我们的相同类的定时任务同时只有一个执行。通常的场景是如果定时任务实际执行时间大于设定的定时任务执行间隔时间就会导致同时多个任务并行。MyScheduled是自定义的一个注解主要用于应用启动时将定时任务注册。package com.xchaset.quartz.annotation;import org.springframework.stereotype.Service;import java.lang.annotation.*;DocumentedTarget(ElementType.TYPE)Retention(RetentionPolicy.RUNTIME)Servicepublic interface MyScheduled { String name() default ; String description() default ; String cronExpression() default ; boolean enable() default true;}获取注解类上的信息package com.xchaset.quartz.utils;import com.xchaset.quartz.annotation.MyScheduled;import com.xchaset.quartz.schedule.JobBean;import org.springframework.core.annotation.AnnotationUtils;import org.springframework.scheduling.quartz.QuartzJobBean;import java.util.ArrayList;import java.util.List;import java.util.Map;public class MyAnnotationUtil { public static List getAllMyScheduledTask(){ List jobBeans new ArrayList(); Map beansOfType SpringContextHolder.getBeansOfType(QuartzJobBean.class); for (Map.Entry beanEntry : beansOfType.entrySet()) { MyScheduled annotation AnnotationUtils.findAnnotation(beanEntry.getValue().getClass(), MyScheduled.class); QuartzJobBean value beanEntry.getValue(); if (annotation null) { continue; } if (annotation.enable()) { String name annotation.name(); String description annotation.description(); String cronExpression annotation.cronExpression(); JobBean build JobBean.builder().jobName(name) .groupName(myGroup) .cronExpression(cronExpression) .description(description) .quartzJobBean(value.getClass()) .build(); jobBeans.add(build); } } return jobBeans; }}启动时注册任务package com.xchaset.quartz.schedule;import com.xchaset.quartz.utils.MyAnnotationUtil;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.CommandLineRunner;import org.springframework.stereotype.Component;import java.util.List;Componentpublic class ScheduleCommandLine implements CommandLineRunner { Autowired private QuartzService quartzService; Override public void run(String... args) throws Exception { List allMyScheduledTask MyAnnotationUtil.getAllMyScheduledTask(); for (JobBean jobBean : allMyScheduledTask) { quartzService.deleteJob(jobBean.getGroupName(),jobBean.getJobName()); quartzService.addJob(jobBean.getQuartzJobBean(),jobBean.getGroupName(),jobBean.getJobName(),jobBean.getCronExpression(),null); } }}对于怎么做到动态的添加、暂停、删除、恢复、执行一个任务呢 quartz提供了这样的API。我们只需要稍微做一下封装。以接口的形式提供出去就可以了。package com.xchaset.quartz.schedule;import org.quartz.*;import org.quartz.impl.matchers.GroupMatcher;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.scheduling.quartz.QuartzJobBean;import org.springframework.stereotype.Service;import javax.annotation.PostConstruct;import java.util.*;Servicepublic class QuartzService { Autowired private Scheduler scheduler; PostConstruct public void startScheduler() { try { scheduler.start(); } catch (SchedulerException e) { e.printStackTrace(); } } /** * 添加一个任务 * param jobClass * param jobGroup * param jobName * param jobTime * param jobMap * throws SchedulerException */ public void addJob(Class extends QuartzJobBean jobClass, String jobGroup, String jobName, String jobTime, Map jobMap) throws SchedulerException { JobDetail build JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroup).build(); if (jobMap ! null jobMap.size() 0) { build.getJobDataMap().putAll(jobMap); } Trigger cronTrigger TriggerBuilder.newTrigger().withIdentity(jobName, jobGroup) .startAt(DateBuilder.futureDate(1, DateBuilder.IntervalUnit.SECOND)) .withSchedule(CronScheduleBuilder.cronSchedule(jobTime)).startNow().build(); scheduler.scheduleJob(build, cronTrigger); } /** * 更新任务时间表达式 * param jobGroup * param jobName * param jobTime * throws SchedulerException */ public void updateJob(String jobGroup, String jobName, String jobTime) throws SchedulerException { TriggerKey triggerKey TriggerKey.triggerKey(jobName, jobGroup); CronTrigger trigger (CronTrigger)scheduler.getTrigger(triggerKey); trigger trigger.getTriggerBuilder().withIdentity(triggerKey) .withSchedule(CronScheduleBuilder.cronSchedule(jobTime)).build(); scheduler.rescheduleJob(triggerKey,trigger); } /** * 删除任务 * param jobGroup * param jobName * throws SchedulerException */ public void deleteJob(String jobGroup,String jobName) throws SchedulerException { scheduler.deleteJob(new JobKey(jobName,jobGroup)); } public void pauseJob(String jobGroup,String jobName) throws SchedulerException { scheduler.pauseJob(new JobKey(jobName,jobGroup)); } /** * 恢复任务 * param jobGroup * param jobName * throws SchedulerException */ public void resumeJob(String jobGroup,String jobName) throws SchedulerException { scheduler.resumeJob(new JobKey(jobName,jobGroup)); } /** * 立刻执行一个任务 * param jobGroup * param jobName * throws SchedulerException */ public void runAJobNow(String jobGroup,String jobName) throws SchedulerException { scheduler.triggerJob(new JobKey(jobName,jobGroup)); } /** * 查询所有的任务 * return * throws SchedulerException */ public List queryAllJob() throws SchedulerException { GroupMatcher anyJobGroup GroupMatcher.anyJobGroup(); Set jobKeys scheduler.getJobKeys(anyJobGroup); List result getJobDetailsBeans(jobKeys); return result; } private List getJobDetailsBeans(Collection jobKeys) throws SchedulerException { List result new ArrayList(); for (JobKey jobKey : jobKeys) { List extends Trigger triggersOfJob scheduler.getTriggersOfJob(jobKey); for (Trigger trigger : triggersOfJob) { String group jobKey.getGroup(); String name jobKey.getName(); String className jobKey.getClass().getName(); String description trigger.getDescription(); JobDataMap jobDataMap trigger.getJobDataMap(); Date nextFireTime trigger.getNextFireTime(); Date previousFireTime trigger.getPreviousFireTime(); Trigger.TriggerState triggerState scheduler.getTriggerState(TriggerKey.triggerKey(name, group)); String cronExpression ; if (trigger instanceof CronTrigger) { cronExpression ((CronTrigger) trigger).getCronExpression(); } JobDetailsBean build JobDetailsBean.builder().className(className).groupName(group).jobName(name).description(description) .cronExpression(cronExpression).jobDataMap(jobDataMap).nextFireTime(nextFireTime).previousFireTime(previousFireTime) .triggerState(triggerState.name()).build(); result.add(build); } } return result; } /** * 查询正在执行的任务 * return * throws SchedulerException */ public List queryCurrentExecutingJob() throws SchedulerException { List result new ArrayList(); List currentlyExecutingJobs scheduler.getCurrentlyExecutingJobs(); for (JobExecutionContext currentlyExecutingJob : currentlyExecutingJobs) { Trigger trigger currentlyExecutingJob.getTrigger(); JobDataMap jobDataMap trigger.getJobDataMap(); JobKey jobKey trigger.getJobKey(); String group jobKey.getGroup(); String name jobKey.getName(); String className jobKey.getClass().getName(); Date nextFireTime trigger.getNextFireTime(); String description trigger.getDescription(); Date previousFireTime trigger.getPreviousFireTime(); Trigger.TriggerState triggerState scheduler.getTriggerState(trigger.getKey()); String cronExpression ; if (trigger instanceof CronTrigger) { cronExpression ((CronTrigger) trigger).getCronExpression(); } JobDetailsBean build JobDetailsBean.builder().className(className).groupName(group).jobName(name).description(description) .cronExpression(cronExpression).jobDataMap(jobDataMap).nextFireTime(nextFireTime).previousFireTime(previousFireTime) .triggerState(triggerState.name()).build(); result.add(build); } return result; }}我们可以在上面代码的基础上对外提供接口这样就可以通过可视化的界面来动态的对任务进行调度了。以上就是springboot集成quartz的简单使用了。
http://www.pierceye.com/news/33238/

相关文章:

  • 哪个网站可以做封面炫酷手机网站模板
  • 徐州好点的做网站的公司有哪些物流网站建设方案
  • 网站开发专员绩效考核网站开发专业能力
  • 做网站的小结比价网站源码整站程序
  • 自媒体网站源码wordpress调用当前分类列表
  • 网站改版中 模板小精灵儿童网站免费做踢
  • 东莞网站SEO优化托管集团网站建设方案书
  • 遵义做网站哪家好哪家好有没有跟一起做网店一样的网站
  • 朋友叫我去柬埔寨做彩票网站推广seo佛山
  • 航空港建设局网站wordpress更改轮播图
  • 晋中网站建设费用中国互联网大厂排名
  • 庭院设计网站推荐福田网站 建设深圳信科
  • 站内seo的技巧全国招商代理项目
  • 专业微网站开发如何做品牌推广网站
  • wordpress酷站wordpress 网站教程
  • 做网站推广什么是网络营销网络营销有分哪几种
  • wordpress收费资源下载刷排名seo
  • 网站开发部门结构1111wk域名更换
  • 查询关键词网站wordpress 表单支付
  • 个人网站建设制作优秀的网络营销策划书
  • 做网站办什么营业执照什么是网络推广营销
  • 记事本做网站改变图片大小淘宝客怎么做直播网站
  • 山东网站建设和游戏开发的公司排名南宁企业建站系统模板
  • 网上哪个网站做的系统好用吗南京h5网站建设
  • 福州做网站优化做的的网站怎样上传
  • 网页如何建设wordpress换主题影响seo吗
  • 招聘网站可以同时做两份简历吗6十大采购平台
  • 抚远佳木斯网站建设wordpress调用指定id文章
  • 网站开发 在html标记后出现乱码 查看源文件显示是问好莱州网站建设青岛华夏商务网
  • 企业网站源码带后台关于加强学校网站建设的通知