前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 定时任务之Quartz

Spring Boot 定时任务之Quartz

作者头像
用户2146693
发布2019-08-08 14:37:28
4660
发布2019-08-08 14:37:28
举报
文章被收录于专栏:架构师进阶架构师进阶

Quartz is a richly featured, open source job scheduling library that can be integrated within virtually any Java application。

前言

当定时任务愈加复杂时,使用Spring注解@Schedule 已经不能满足业务需要。 @Schedule 实现的定时任务:

  • 不能动态管理任务;
  • Job信息不能持久化到数据库;
  • Job执行失败的时候不能保持数据一致性;
  • 不支持集群分布式部署。

Quartz能够完全满足上述需求,而且还支持开源。Quartz是一个功能丰富的开源作业调度库,可以集成到几乎任何Java应用程序中。

集成

Spring Boot 对集成Quartz提供了很好的支持,只需要在pom文件中添加以下依赖即可。

代码语言:javascript
复制
        <!--quartz-->
        <!-- 该依赖必加,里面有spring对schedule的支持 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>

代码实现

完整实现如下:

代码语言:javascript
复制
//定义一个Job,必须实现org.quartz.Job 接口
public class JobTest implements Job {
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("This is a test!!!" + new Date());
    }

    public static void main(String[] args) {
        try {

            //1.实例化并开始一个调度器Schedule
            // Grab the Scheduler instance from the Factory
            Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
            // and start it off
            scheduler.start();

            //2.添加触发器
            // define the job and tie it to our MyJob class
            JobDetail jobDetail = newJob(JobTest.class).withIdentity("job1", "group1").build();
            // Trigger the job to run now, and then repeat every 40 seconds forever
            Trigger trigger = newTrigger().withIdentity("trigger1", "group1").startNow().withSchedule(simpleSchedule().withIntervalInSeconds(40).repeatForever()).build();
            // Tell quartz to schedule the job using our trigger
            scheduler.scheduleJob(jobDetail, trigger);
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}

结果

这里写图片描述
这里写图片描述

参照

quartz-scheduler

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 集成
  • 代码实现
  • 结果
  • 参照
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档