【定时任务】Spring Boot 中如何使用 Quartz
这篇文章将介绍如何在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的更多相关文章
- Spring Boot 中实现定时任务的两种方式
在 Spring + SpringMVC 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用第三方框架 Qua ...
- 如何在Spring Boot 中动态设定与执行定时任务
本篇文章的目的是记录并实现在Spring Boot中,动态设定与执行定时任务. 我的开发项目是 Maven 项目,所以首先需要在 pom.xml 文件中加入相关的依赖.依赖代码如下所示: <de ...
- Spring Boot中使用@Scheduled创建定时任务
我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时地检查和监控一些标志.参数等. 创建定时任务 在Spring Boot中编写定时 ...
- 【spring boot】spring boot中使用定时任务配置
spring boot中使用定时任务配置 =============================================================================== ...
- Spring boot中的定时任务(计划任务)
从Spring3.1开始,计划任务在Spring中实现变得异常的简单.首先通过配置类注解@EnableScheduling来开启对计划任务的支持,然后再要执行的计划任务的方法上注释@Scheduled ...
- 在Spring Boot中动态实现定时任务配置
原文路径:https://zhuanlan.zhihu.com/p/79644891 在日常的项目开发中,往往会涉及到一些需要做到定时执行的代码,例如自动将超过24小时的未付款的单改为取消状态,自动将 ...
- 204. jetcache:在Spring Boot中怎么玩?
[视频&交流平台] àSpringBoot视频:http://t.cn/R3QepWG à SpringCloud视频:http://t.cn/R3QeRZc à Spring Boot源 ...
- 201. Spring Boot JNDI:Spring Boot中怎么玩JNDI
[视频&交流平台] àSpringBoot视频:http://t.cn/R3QepWG à SpringCloud视频:http://t.cn/R3QeRZc à Spring Boot源 ...
- Spring Boot中@Scheduled注解的使用方法
Spring Boot中@Scheduled注解的使用方法 一.定时任务注解为@Scheduled,使用方式举例如下 //定义一个按时间执行的定时任务,在每天16:00执行一次. @Scheduled ...
随机推荐
- Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第四部分(Page 9)
编写你的第一个 Django app,第四部分(Page 9)转载请注明链接地址 该教程上接前面的第三部分.我们会继续开发 web-poll 应用,并专注于简单的表单处理和简化代码. 写一个简单的表单 ...
- 关于thinkpad安装win10操作系统
thinkpad预装的是win8或者win10,会有自己的分区方式是GPT,所以会出现两个引导分区. F2进入tinkpad的bios,F12进入启动选项 我们用pe进入后,用分区工具删除两个分区,然 ...
- 同一条sql语句,只是改变了搜索的条件,就很慢?
重建索引: ) 显示索引信息: dbcc showcontig('表名’) 具体参考:http://www.cnblogs.com/bluedy1229/p/3227167.html
- JHipster项目启动后默认的8080主页是空白页面?
1.背景 根据官网一步步地生成项目,他喵的启动后居然是一个空白页面,这怎么玩啊?还有这种操作的吗?跟说好的不一样啊!关于JHipster资料,国内少的可怜,几乎都是同一样的东西,纯介绍的文章,只好上s ...
- iOS程序启动过程笔记
CHENYILONG Blog 笔记 一.iOS程序的完整启动过程(有storyboard)1.先执行main函数,main内部会调用UIApplicationMain函数 2.UIApplicati ...
- Python概念-反射之文化底蕴版:反正射了
什么是反射 光在两种物质分界面上改变传播方向又返回原来物质中的现象,叫反射! 以上,是反射的物理定义,与python中的反射概念,完全没有任何关系 书归正传:反射 就是通过字符串的形式,操作对象相关的 ...
- 关于禁用"请停用以开发者模式运行的扩展程序"提示
有兴趣研究谷歌浏览器扩展开发,但每次开启高版本chrome都会有烦人的提示 因为我用的360急速,目前还有提示,但使用原生chrome连插件都给删了,无语
- 39 - 同步-异步-IO多路复用
目录 1 同步与异步 2 阻塞与非阻塞 3 什么是IO 3.1 内核态用户态 3.2 IO两个阶段 3.3 IO模型 3.3.1 同步阻塞IO 3.3.2 同步非阻塞IO 3.3.3 IO多路复用 3 ...
- Count 1 in Binary
Count how many 1 in binary representation of a 32-bit integer. Example Given 32, return 1 Given 5, r ...
- 做了这么久的 DBA,你真的认识 MySQL 数据安全体系?【转】
给大家分享下有关MySQL在数据安全的话题,怎么通过一些配置来保证数据安全以及保证数据的存储落地是安全的. 我是在2014年加入陌陌,2015年加入去哪儿网,做MySQL的运维,包括自动化的开发. 接 ...