如何在springboot项目中实现一个动态定时任务

  介绍

这篇文章将为大家详细讲解有关如何在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项目中实现一个动态定时任务