介绍
这篇文章将为大家详细讲解有关如何在springboot项目中实现一个动态定时任务,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
<强> 1,maven引入石英包强>
& lt; !——, https://mvnrepository.com/artifact/org.quartz-scheduler/quartz ——比; & lt; dependency> ,& lt; groupId> org.quartz-scheduler ,& lt; artifactId> quartz ,& lt; version> 2.3.2 & lt;/dependency>
<强> 2,创建定时任务工厂类强>
/* * ,*定时任务工厂类 ,*/@ component public class  JobFactory extends SpringBeanJobFactory  implements ApplicationContextAware { ,private transient  AutowireCapableBeanFactory beanFactory; ,@Override ,protected Object  createJobInstance (TriggerFiredBundle 包),throws Exception { ,final Object jobInstance =, super.createJobInstance(包); ,beanFactory.autowireBean (jobInstance); ,return jobInstance; ,} ,@Override ,public void  setApplicationContext (ApplicationContext applicationContext), throws BeansException {=,,this.beanFactory  applicationContext.getAutowireCapableBeanFactory (); ,} }
<强> 3,创建定时任务抽象类强>
public abstract class AbstractTask implements Job { ,private Logger Logger =, LoggerFactory.getLogger (AbstractTask.class); ,protected abstract  void executeInternal (JobExecutionContext 上下文),throws 例外;/* * ,*定时任务标识 ,*/,private String 关键;/* * ,*数据库里配置的主键id ,*/,private Long  dataBaseId; ,@Override ,public void 执行(JobExecutionContext 上下文),{ ,try { executeInternal才能(上下文); ,}catch (Exception e), { logger.error才能(e.getMessage (), e); logger.error才能(“job  execute 失败!“); ,} ,} ,public String  getKey (), { ,return 关键; ,} ,public void  setKey (String 键),{=,this.key 关键; ,} ,public Long  getDataBaseId (), { ,return dataBaseId; ,} ,public void  setDataBaseId (Long dataBaseId), {=,,this.dataBaseId  dataBaseId; ,} }
<强> 4,创建定时任务业务实现类强>
这里可以写你的业务代码,实现具体的业务逻辑。
@ component (“JobTask") public class  JobTask extends AbstractTask  { ,@Override ,protected void  executeInternal (JobExecutionContext 上下文),{ ,System.out.println (“key =,,, +, this.getKey ()); ,System.out.println (“dataBaseId =,,, +, this.getDataBaseId ()); ,} }
<强> 5,创建定时任务管理器强>
包括项目启动时添加定时任务,手动添加定时任务,更新定时任务,删除定时任务方法。
/* * ,*定时任务管理容器,component (单例模式) ,*/@ component @Scope (“singleton") public class  JobQuartzManager implements ApplicationContextAware  {/* * ,*创建新的调度器 ,*/,private static  SchedulerFactory SchedulerFactory =, new StdSchedulerFactory (); ,private Scheduler 调度器;/* * ,*定义组名称,不同的组用于区分任务 ,*/,private static  final String  JOB_GROUP_NAME =,“JOB_GROUP_NAME"; ,private static  final String  TRIGGER_GROUP_NAME =,“TRIGGER_GROUP_NAME";/* * ,*日志 ,*/,private Logger Logger =, LoggerFactory.getLogger (JobQuartzManager.class); ,private ApplicationContext  applicationContext; ,@ autowired ,private JobFactory  jobFactory; ,public void  start (), { ,//启动定时任务(初始化) ,try { 时间=this.scheduler 才能;schedulerFactory.getScheduler (); scheduler.setJobFactory才能(jobFactory);,//设置定时任务工厂模式//才能项目启动时默认给春容器添加动态的定时任务 this.addJob才能(“job", +, 100 l, 100 l, JobTask.class,,“0/2 *, *, *, *, ?“); ,}catch (SchedulerException e), { logger.error才能(e.getMessage (), e); throw 才能;new  RuntimeException (“init Scheduler failed"); ,} ,} ,public boolean  addJob (String jobName, Long dataBaseId,, Class jobClass,, String cronExp), { ,boolean result =,假; (!,if  CronExpression.isValidExpression (cronExp)), { logger.error才能(“Illegal  cron expression 格式({})“,,cronExp); null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null如何在springboot项目中实现一个动态定时任务