如何在springboot中利用石英实现一个定时任务功能

  介绍

如何在springboot中利用石英实现一个定时任务功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

<强>一、新建一个springboot工程,并添加依赖

& lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-data-jpa   & lt;/dependency>      & lt; dependency> & lt; !——为了方便测试,此处使用了内存数据库——比;   & lt; groupId> com.h3database   & lt; artifactId> h3   & lt; scope> runtime   & lt;/dependency>   & lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-test   & lt; scope> test   & lt;/dependency>      & lt; dependency>   & lt; groupId> org.quartz-scheduler   & lt; artifactId> quartz   & lt; version> 2.2.1   & lt; exclusions>   & lt; exclusion>   & lt; artifactId> slf4j-api   & lt; groupId> org.slf4j   & lt;/exclusion>   & lt;/exclusions>   & lt;/dependency>   & lt; dependency> & lt; !——该依赖必加,里面有弹簧对时间表的支持——比;   & lt; groupId> org.springframework   & lt; artifactId> spring-context-support   & lt;/dependency>

<强>二,配置文件的应用程序。属性

 #服务器端口号
  server.port=7902
  #是否生成ddl语句
  spring.jpa.generate-ddl=false
  #是否打印sql语句
  spring.jpa.show-sql=true
  #自动生成ddl,由于指定了具体的ddl,此处设置为零
  spring.jpa.hibernate.ddl-auto=没有
  #使用H2数据库
  spring.datasource.platform=h3
  #指定生成数据库的模式文件位置
  spring.datasource.schema=类路径:schema.sql
  #指定插入数据库语句的脚本位置
  spring.datasource.data=https://www.yisu.com/zixun/classpath data.sql
  #配置日志打印信息
  logging.level.root=信息
  logging.level.org.hibernate=信息
  logging.level.org.hibernate.type.descriptor.sql.BasicBinder=跟踪
  logging.level.org.hibernate.type.descriptor.sql.BasicExtractor=跟踪
  logging.level.com.itmuch=调试
  

<强>三,实体类

包com.chhliu.springboot.quartz.entity;
  
  进口javax.persistence.Column;
  进口javax.persistence.Entity;
  进口javax.persistence.GeneratedValue;
  进口javax.persistence.GenerationType;
  进口javax.persistence.Id;
  
  @ entity
  公共类配置{
  @ id
  @GeneratedValue(策略=GenerationType.AUTO)
  私人长id;
  
  @ column
  私人字符串cron;/* *
  * @return id
  */公共长getId () {
  返回id;
  }
  ……此处省略getter和setter方法……
  }
  

<强>四、任务类

包com.chhliu.springboot.quartz.entity;
  
  进口org.slf4j.Logger;
  进口org.slf4j.LoggerFactory;
  进口org.springframework.context.annotation.Configuration;
  进口org.springframework.scheduling.annotation.EnableScheduling;
  进口org.springframework.stereotype.Component;
  
  @ configuration
  @ component//此注解必加
  @EnableScheduling//此注解必加
  公开课ScheduleTask {
  私有静态最终日志记录器=LoggerFactory.getLogger (ScheduleTask.class);
  公共空间sayHello () {
  LOGGER.info (“Hello world,我# 39;m世界之王! ! !“);
  }
  }
  

<强>五、石英配置类

由于springboot追求零xml配置,所以下面会以配置Bean的方式来实现

包com.chhliu.springboot.quartz.entity;
  
  进口org.quartz.Trigger;
  进口org.springframework.context.annotation.Bean;
  进口org.springframework.context.annotation.Configuration;
  进口org.springframework.scheduling.quartz.CronTriggerFactoryBean;
  进口org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;
  进口org.springframework.scheduling.quartz.SchedulerFactoryBean;
  
  @ configuration
  公开课QuartzConfigration {/* *
  *注意:
  *细节:配置定时任务
  */@ bean (name=癹obDetail")
  公共MethodInvokingJobDetailFactoryBean detailFactoryBean (ScheduleTask任务){//ScheduleTask为需要执行的任务
  MethodInvokingJobDetailFactoryBean jobDetail=new MethodInvokingJobDetailFactoryBean ();/*
  *是否并发执行
  *例如每5 s执行一次任务,但是当前任务还没有执行完,就已经过了5 s了,
  *如果此处为真,则下一个任务会执行,如果此处为假,则下一个任务会等待上一个任务执行完后,再开始执行
  */jobDetail.setConcurrent(假);
  
  jobDetail.setName (“srd-chhliu");//设置任务的名字
  jobDetail.setGroup (“srd");//设置任务的分组,这些属性都可以存储在数据库中,在多任务的时候使用/*
  *为需要执行的实体类对应的对象
  */jobDetail.setTargetObject(任务);/*
  * sayHello为需要执行的方法
  *通过这几个配置,告诉JobDetailFactoryBean我们需要执行定时执行ScheduleTask类中的sayHello方法
  */jobDetail.setTargetMethod (“sayHello");
  返回jobDetail;
  }/* *
  *注意:
  *细节:配置定时任务的触发器,也就是什么时候触发执行定时任务
  */@ bean (name=癹obTrigger")
  公共CronTriggerFactoryBean cronJobTrigger (MethodInvokingJobDetailFactoryBean jobDetail) {
  CronTriggerFactoryBean跳跳虎=new CronTriggerFactoryBean ();
  tigger.setJobDetail (jobDetail.getObject ());
  tigger.setCronExpression(“0 30 20 * *和# 63;“);//初始时的cron表达式
  tigger.setName (“srd-chhliu");//触发器的名称
  返回跳跳虎;
  
  }/* *
  *注意:
  *细节:定义石英调度工厂
  */@ bean (name=皊cheduler")
  公共SchedulerFactoryBean schedulerFactory(触发cronJobTrigger) {
  SchedulerFactoryBean bean=new SchedulerFactoryBean ();//用于石英集群,QuartzScheduler启动时更新己存在的工作
  bean.setOverwriteExistingJobs(真正的);//延时启动,应用启动1秒后
  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中利用石英实现一个定时任务功能