文档章节

Spring Boot 定时任务之Quartz

wuxinshui
 wuxinshui
发布于 2017/08/25 00:07
字数 388
阅读 75
收藏 0

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文件中添加以下依赖即可。

        <!--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>

代码实现

完整实现如下:

//定义一个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

© 著作权归作者所有

wuxinshui

wuxinshui

粉丝 3
博文 77
码字总数 46555
作品 0
普陀
程序员
私信 提问
Spring Boot实践--定时任务两种(Schedule与Quartz整合)

Spring Boot实践--定时任务两种(Schedule与Quartz整合) 最近在项目中使用到定时任务,之前一直都是使用Quartz 来实现,最近看Spring 基础发现其实Spring 提供 Spring Schedule 可以帮助我们实...

spinachgit
2018/02/11
320
0
Spring Boot Quartz 分布式集群任务调度实现

主要内容 Spring Scheduler 框架 Quartz 框架,功能强大,配置灵活 Quartz 集群 mysql 持久化定时任务脚本(tables_mysql.sql) 介绍 在工程中时常会遇到一些需求,例如定时刷新一下配置、隔一...

编辑之路
06/21
129
0
崛起于Springboot2.0.X之集成Quartz定时调度(29)

下面是两种方法定时任务,一个是集成quartz,另外一个是spring自带的定时任务,后者更简单一些。 1、添加pom依赖 springboot2.0之后,spring-boot-starter中已经包含了quart的依赖,所以只需...

木九天
2018/07/24
3.3K
0
SpringBoot集成Quartz

SpringBoot集成Quartz 什么是Quartz Quartz 的优点 丰富的 Job 操作 API; 支持多种配置 Spring Boot 无缝集成; 支持持久化; 支持集群 开源 Quartz的核心概念 1.Job 表示一个工作,要执行的...

Grittan
2018/10/18
165
0
spring boot实现动态增删启停定时任务

在spring boot项目中,可以通过@EnableScheduling注解和@Scheduled注解实现定时任务,也可以通过SchedulingConfigurer接口来实现定时任务。但是这两种方式不能动态添加、删除、启动、停止任务...

jessehua
04/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
今天
4
0
Xss过滤器(Java)

问题 最近旧的系统,遇到Xss安全问题。这个系统采用用的是spring mvc的maven工程。 解决 maven依赖配置 <properties><easapi.version>2.2.0.0</easapi.version></properties><dependenci......

亚林瓜子
今天
10
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
10
0
Set 和 Map

Set 1:基本概念 类数组对象, 内部元素唯一 let set = new Set([1, 2, 3, 2, 1]); console.log(set); // Set(3){ 1, 2, 3 } [...set]; // [1, 2, 3] 接收数组或迭代器对象 ...

凌兮洛
今天
4
0
PyTorch入门笔记一

张量 引入pytorch,生成一个随机的5x3张量 >>> from __future__ import print_function>>> import torch>>> x = torch.rand(5, 3)>>> print(x)tensor([[0.5555, 0.7301, 0.5655],......

仪山湖
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部