全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

SpringBoot定时任务两种(Spring Schedule 与 Quartz 整合 )实现方法

前言

最近在项目中使用到定时任务,之前一直都是使用Quartz 来实现,最近看Spring 基础发现其实Spring 提供 Spring Schedule 可以帮助我们实现简单的定时任务功能。

下面说一下两种方式在Spring Boot 项目中的使用。

Spring Schedule 实现定时任务

Spring Schedule 实现定时任务有两种方式 1. 使用XML配置定时任务, 2. 使用 @Scheduled 注解。 因为是Spring Boot 项目 可能尽量避免使用XML配置的形式,主要说注解的形式.

Spring Schedule 提供三种形式的定时任务:

固定等待时间 @Scheduled(fixedDelay = 时间间隔 )

@Component
public class ScheduleJobs {
  public final static long SECOND = 1 * 1000;
  FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");


  @Scheduled(fixedDelay = SECOND * 2)
  public void fixedDelayJob() throws InterruptedException {
    TimeUnit.SECONDS.sleep(2);
    System.out.println("[FixedDelayJob Execute]"+fdf.format(new Date()));
  }
}

固定间隔时间 @Scheduled(fixedRate = 时间间隔 )

@Component
public class ScheduleJobs {
  public final static long SECOND = 1 * 1000;
  FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");


  @Scheduled(fixedRate = SECOND * 4)
  public void fixedRateJob() {
    System.out.println("[FixedRateJob Execute]"+fdf.format(new Date()));
  }
}

Corn表达式 @Scheduled(cron = Corn表达式)

@Component
public class ScheduleJobs {
  public final static long SECOND = 1 * 1000;
  FastDateFormat fdf = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");


  @Scheduled(cron = "0/4 * * * * ?")
  public void cronJob() {
    System.out.println("[CronJob Execute]"+fdf.format(new Date()));
  }
}

Spring Boot 整合 Quartz 实现定时任务

添加Maven依赖

    <dependency>
      <groupId>org.quartz-scheduler</groupId>
      <artifactId>quartz</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
    </dependency>

Spring Boot 整合 Quartz

Spring 项目整合 Quartz 主要依靠添加 SchedulerFactoryBean 这个 FactoryBean ,所以在maven 依赖中添加 spring-context-support 。

首先添加 QuartzConfig 类 来声明相关Bean

@Configuration
public class QuartzConfig {
  @Autowired
  private SpringJobFactory springJobFactory;

  @Bean
  public SchedulerFactoryBean schedulerFactoryBean() {
    SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
    schedulerFactoryBean.setJobFactory(springJobFactory);
    return schedulerFactoryBean;
  }

  @Bean
  public Scheduler scheduler() {
    return schedulerFactoryBean().getScheduler();
  }
}

这里我们需要注意 我注入了一个 自定义的JobFactory ,然后 把其设置为SchedulerFactoryBean 的 JobFactory。其目的是因为我在具体的Job 中 需要Spring 注入一些Service。

 所以我们要自定义一个jobfactory, 让其在具体job 类实例化时 使用Spring 的API 来进行依赖注入。

SpringJobFactory 具体实现:

@Component
public class SpringJobFactory extends AdaptableJobFactory {

  @Autowired
  private AutowireCapableBeanFactory capableBeanFactory;

  @Override
  protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
    Object jobInstance = super.createJobInstance(bundle);
    capableBeanFactory.autowireBean(jobInstance);
    return jobInstance;
  }
}

具体使用 (摘取自项目代码):

@Service
public class QuartzEventServiceImpl implements QuartzEventService {
  private static final String JOB_GROUP = "event_job_group";
  private static final String TRIGGER_GROUP = "event_trigger_group";
  @Autowired
  private Scheduler scheduler;

  @Override
  public void addQuartz(Event event) throws SchedulerException {
    JSONObject eventData = JSONObject.parseObject(event.getEventData());
    Date triggerDate = eventData.getDate("date");
    JobDetail job = JobBuilder.newJob(EventJob.class).withIdentity(event.getId().toString(), JOB_GROUP).usingJobData(buildJobDateMap(event)).build();
    Trigger trigger = TriggerBuilder.newTrigger().withIdentity(event.getId().toString(), TRIGGER_GROUP).startAt(triggerDate).build();
    scheduler.scheduleJob(job, trigger);
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# springboot整合quartz  # spring  # boot  # 定时  # schedule  # SpringBoot中实现定时任务的4种方式详解  # SpringBoot中实现定时任务的几种方式  # SpringBoot2 task scheduler 定时任务调度器四种方式  # SpringBoot下使用定时任务的方式全揭秘(6种)  # SpringBoot实现固定和动态定时任务的三种方法  # Springboot实现定时任务的4种方式举例详解  # SpringBoot实现定时任务的三种方式小结  # SpringBoot最新定时任务的7种实现方案  # 自定义  # 的是  # 都是  # 我在  # 两种  # 三种  # 有两种  # 设置为  # 来实现  # 可以帮助  # 需要注意  # 让其  # 其目  # 大家多多  # 近看  # format  # throws  # fixedDelayJob  # InterruptedException  # sleep 


相关文章: 南京网站制作费用,南京远驱官方网站?  如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法  上海网站制作开发公司,上海买房比较好的网站有哪些?  C#怎么使用委托和事件 C# delegate与event编程方法  如何自定义建站之星网站的导航菜单样式?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  南宁网站建设制作定制,南宁网站建设可以定制吗?  如何通过免费商城建站系统源码自定义网站主题与功能?  如何快速生成ASP一键建站模板并优化安全性?  高端建站三要素:定制模板、企业官网与响应式设计优化  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  建站org新手必看:2024最新搭建流程与模板选择技巧  如何选择适合PHP云建站的开源框架?  制作表格网站有哪些,线上表格怎么弄?  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  c# 在高并发场景下,委托和接口调用的性能对比  单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?  微信h5制作网站有哪些,免费微信H5页面制作工具?  在线制作视频的网站有哪些,电脑如何制作视频短片?  焦点电影公司作品,电影焦点结局是什么?  建站主机SSH密钥生成步骤及常见问题解答?  如何通过网站建站时间优化SEO与用户体验?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  临沂网站制作企业,临沂第三中学官方网站?  如何选购建站域名与空间?自助平台全解析  如何在腾讯云服务器快速搭建个人网站?  建站之星如何实现PC+手机+微信网站五合一建站?  如何用wdcp快速搭建高效网站?  成都网站制作报价公司,成都工业用气开户费用?  如何在橙子建站上传落地页?操作指南详解  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  如何选择高效响应式自助建站源码系统?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  ,怎么用自己头像做动态表情包?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  智能起名网站制作软件有哪些,制作logo的软件?  网站制作企业,网站的banner和导航栏是指什么?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  建站DNS解析失败?如何正确配置域名服务器?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  *服务器网站为何频现安全漏洞?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  山东云建站价格为何差异显著?  如何做静态网页,sublimetext3.0制作静态网页?  ,有什么在线背英语单词效率比较高的网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。