这篇文章将介绍如何在Spring Boot 中使用Quartz。

一、首先在 pom.xml 中添加 Quartz 依赖。

     <!-- quartz依赖 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency> <!-- 该依赖必加,里面有spring对schedule的支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>

二、编写任务类,里面编写希望得到定时执行的具体任务。注意在任务类上需要添加 @Component 注解,方便Spring 扫描到该组件并注解到Spring 容器中。

/**
* 定时任务
* @author lWX515915
*
*/
@Component
public class MyTask{ public void task1() {
System.out.println("this is task1 time: " + new Date());
} }

三、然后编写配置类 QuartzConfig ,该类中使用Java代码详细描述了如何配置Quartz。类前添加@Configuration注解 表示这是配置类

@Configuration 表示这个类会声明一个或者多个 Bean 类 并且有可能会被Spring 容器处理来生成bean的定义和bean对应的服务请求。

在configuration类中,我们需要对三个对象JobDetail、Trigger 和 Scheduler 进行配置。

/**
* Quartz配置类
* @author lWX515915
*
*/
@Configuration
public class QuartzConfig
{
...
}

1、配置JobDetail

  @Bean表示该方法返回一个bean,并交付Spring容器管理 。

  参数是任务,setTargetObject 是设置具体的执行目标,setTargetMethod 是设置具体的执行方法。

  MethodInvokingJobDetailFactoryBean 是JobDetail 的 bean 工厂。

  /**
* 配置JobDetail
* @param scheduledTask 需要被执行的任务
* @return
*/
@Bean(name="jobDetail")
public MethodInvokingJobDetailFactoryBean detailFactoryBean(MyTask task) {
MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean(); jobDetail.setConcurrent(false);//设置多任务是否采用并发模式 jobDetail.setName("job1");
jobDetail.setGroup("group1"); jobDetail.setTargetObject(task); //设置具体执行目标
jobDetail.setTargetMethod("task1"); //设置具体执行方法 return jobDetail;
}

2、配置 Trigger

  其中参数表示JobDetail,这里就是我们之前注册到Spring 容器中的JobDetail bean。

  setJobDetail 设置具体的任务。

  setCronExpression 设置cron 表达式。

  返回值是CronTriggerFactoryBean,是一个CronTrigger对应的bean factory。

  /**
* 配置trigger
* @param jobDetail
* @return
*/
@Bean(name="jobTrigger")
public CronTriggerFactoryBean cronJobTrigger(MethodInvokingJobDetailFactoryBean jobDetail) {
CronTriggerFactoryBean jobTrigger = new CronTriggerFactoryBean();
jobTrigger.setJobDetail(jobDetail.getObject());
jobTrigger.setCronExpression("0/10 * * ? * *");
jobTrigger.setName("jobTrigger");
return jobTrigger;
}

3、配置Scheduler

  其中setOverwriteExistingJobs 设置是否更新已经存在的job

  setTriggers 设置trigger

  返回scheduler 对应的bean工厂

  /**
* 配置调度器
* @param trigger
* @return
*/
@Bean(name="jobSchedule")
public SchedulerFactoryBean schedulerFactory(CronTriggerFactoryBean trigger) {
SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean(); schedulerFactory.setOverwriteExistingJobs(true);//设置更新已经存在的job
schedulerFactory.setTriggers(trigger.getObject()); return schedulerFactory;
}

经过上面三个步骤,Quartz 的配置类就已经完成了

四、启动应用 查看结果,下面是运行的结果。可以看到实现了我们想要的结果。

综上,Spring Boot 中使用 Quartz 的关键在与 Quartz 的配置。

【定时任务】Spring Boot 中如何使用 Quartz的更多相关文章

  1. Spring Boot 中实现定时任务的两种方式

    在 Spring + SpringMVC 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用第三方框架 Qua ...

  2. 如何在Spring Boot 中动态设定与执行定时任务

    本篇文章的目的是记录并实现在Spring Boot中,动态设定与执行定时任务. 我的开发项目是 Maven 项目,所以首先需要在 pom.xml 文件中加入相关的依赖.依赖代码如下所示: <de ...

  3. Spring Boot中使用@Scheduled创建定时任务

    我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时地检查和监控一些标志.参数等. 创建定时任务 在Spring Boot中编写定时 ...

  4. 【spring boot】spring boot中使用定时任务配置

    spring boot中使用定时任务配置 =============================================================================== ...

  5. Spring boot中的定时任务(计划任务)

    从Spring3.1开始,计划任务在Spring中实现变得异常的简单.首先通过配置类注解@EnableScheduling来开启对计划任务的支持,然后再要执行的计划任务的方法上注释@Scheduled ...

  6. 在Spring Boot中动态实现定时任务配置

    原文路径:https://zhuanlan.zhihu.com/p/79644891 在日常的项目开发中,往往会涉及到一些需要做到定时执行的代码,例如自动将超过24小时的未付款的单改为取消状态,自动将 ...

  7. 204. jetcache:在Spring Boot中怎么玩?

      [视频&交流平台] àSpringBoot视频:http://t.cn/R3QepWG à SpringCloud视频:http://t.cn/R3QeRZc à Spring Boot源 ...

  8. 201. Spring Boot JNDI:Spring Boot中怎么玩JNDI

      [视频&交流平台] àSpringBoot视频:http://t.cn/R3QepWG à SpringCloud视频:http://t.cn/R3QeRZc à Spring Boot源 ...

  9. Spring Boot中@Scheduled注解的使用方法

    Spring Boot中@Scheduled注解的使用方法 一.定时任务注解为@Scheduled,使用方式举例如下 //定义一个按时间执行的定时任务,在每天16:00执行一次. @Scheduled ...

随机推荐

  1. Java:数值-字符串转换(String转Double)

    String ss = "3.141592653"; double value = Double.valueOf(ss.toString());

  2. 天梯赛 L2-024. (并查集) 部落

    题目链接 题目描述 在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈.我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查 ...

  3. window下卸载MySQL

    更多内容推荐微信公众号,欢迎关注: 网上找来的,留在这做个备份. 1.控制面板里的增加删除程序内进行删除 2.删除MySQL文件夹下的my.ini文件,如果备份好,可以直接将文件夹全部删除 3.开始- ...

  4. tomcat集群及session共享

    一般来说,java web app主要用作两个领域: 1.api.api一般是无状态的,所以无需考虑session共享的问题 2.传统web应用和网站,如crm,oa,erp,b2c,bbs等.尤其b ...

  5. linux键盘input_event浅析【转】

    转自:http://blog.csdn.net/tdstds/article/details/18710965 input_event(mxckbd_dev, EV_KEY, mxckpd_keyco ...

  6. 【驱动】USB驱动实例·串口驱动·键盘驱动【转】

    转自:http://www.cnblogs.com/lcw/p/3159370.html Preface USB体系支持多种类型的设备. 在 Linux内核,所有的USB设备都使用 usb_drive ...

  7. Error: No resource found that matches the given name (at 'icon' with value '@mipmap/Icon')

    问题: error: Error: No resource found that matches the given name (at 'icon' with value '@mipmap/Icon' ...

  8. 通过`__slots__` 节省RAM

    标签(空格分隔): Python进阶 python中,由于创建每个实例都会有成员,这些成员都会被保存在dict中,但是Python不能静态分配RAM,当创建实例时,因此dict的大小会比所需要的内存大 ...

  9. Scrapy项目之User timeout caused connection failure(异常记录)

    Windows 10家庭中文版,Python 3.6.4,Scrapy 1.5.0, 提示:此文存在问题,真正测试, 请勿阅读, 07-14 14:26更新: 经过两个多小时的测试,发现此问题的原因是 ...

  10. CNN Architectures(AlexNet,VGG,GoogleNet,ResNet,DenseNet)

    AlexNet (2012) The network had a very similar architecture as LeNet by Yann LeCun et al but was deep ...