Springboot集成Quartz
之前学习过spring的定时任务 :https://www.cnblogs.com/slimshady/p/10112515.html
本文主要学习记录下springboot使用quartz
1. pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.7.RELEASE</version>
</dependency> <dependency>
<groupId>org.quartz-scheduler</groupId> <!-- Quartz -->
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <!-- lombok @Slf4j注解用于日志输出-->
<version>1.16.22</version>
<scope>provided</scope>
</dependency>
2. 代码结构

3. SimpleTriggerJob.java
package com.example.service; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import java.text.SimpleDateFormat;
import java.util.Date; /**
* 任务一 使用simpleTrigger
* Created by Administrator on 2018/12/20.
*/
@Component
@Slf4j
public class SimpleTriggerJob {
public void printMessage() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss ");
log.info("SimpleTriggerFactoryBean任务在"+sdf.format(new Date())+"执行......");
}
}
4.CronTriggerJob.java
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component; import java.text.SimpleDateFormat;
import java.util.Date; /**
* 任务二 使用cronTrigger * Created by Administrator on 2018/12/20.
*/
@Component("jobCornBean")
@Slf4j
public class CronTriggerJob {
public void printAnotherMessage(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss ");
log.info("CronTriggerFactoryBean任务在"+sdf.format(new Date())+"执行.....");
}
}
5. JobConfig.java
import com.example.bean.JobConfigBean;
import com.example.service.CronTriggerJob;
import com.example.service.ScheduledJob;
import com.example.service.SimpleTriggerJob;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Trigger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.quartz.*; import java.util.ArrayList;
import java.util.List; /**
* Created by Administrator on 2018/12/20.
*/
@Configuration
public class JobConfig { @Autowired
private SimpleTriggerJob jobBean; @Autowired
private ScheduledJob scheduledJob; @Autowired
private CronTriggerJob jobCornBean; /**
* 配置调度器第一种方式
* @return
*/
@Bean("methodInvokingJobDetailFactoryBean")
public MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean(){
MethodInvokingJobDetailFactoryBean bean = new MethodInvokingJobDetailFactoryBean();
bean.setTargetObject(jobBean);
bean.setTargetMethod("printMessage");
bean.setConcurrent(false);
return bean;
} /**
* 配置调度器第二种方式 可以传递额外的参数给定时job
* @return
*/
@Bean("jobDetailFactoryBean")
public JobDetailFactoryBean jobDetailFactoryBean(){
JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
jobDetailFactoryBean.setJobClass(scheduledJob.getClass());
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("jobCornBean",jobCornBean);
jobDetailFactoryBean.setJobDataMap(jobDataMap);
jobDetailFactoryBean.setDurability(true);
return jobDetailFactoryBean;
} /**
* 触发器 simpleTriggerFactoryBean
* @param methodInvokingJobDetailFactoryBean
* @return
*/
@Bean("simpleTriggerFactoryBean")
public SimpleTriggerFactoryBean simpleTriggerFactoryBean(MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean){
SimpleTriggerFactoryBean simpleTriggerFactoryBean = new SimpleTriggerFactoryBean();
simpleTriggerFactoryBean.setJobDetail(methodInvokingJobDetailFactoryBean.getObject());
simpleTriggerFactoryBean.setStartDelay(1000);
simpleTriggerFactoryBean.setRepeatInterval(1000);//每秒执行一次 return simpleTriggerFactoryBean;
} /**
* 触发器 cronTriggerFactoryBean
* @param jobDetailFactoryBean
* @return
*/
@Bean("cronTriggerFactoryBean")
public CronTriggerFactoryBean cronTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){
CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();
cronTriggerFactoryBean.setJobDetail(jobDetailFactoryBean.getObject());
cronTriggerFactoryBean.setCronExpression("0/5 * * ? * *");//每5秒执行一次
return cronTriggerFactoryBean;
} /**
* 将上面的jobDetails和triggers都配置到一个类中,这样便于后续定时任务的添加
* @return
*/
@Bean("jobConfigBean")
public JobConfigBean jobConfigBean(){
JobConfigBean jobConfigBean = new JobConfigBean();
List<JobDetail> jobDetails = new ArrayList<>();
jobDetails.add(methodInvokingJobDetailFactoryBean().getObject());
jobDetails.add(jobDetailFactoryBean().getObject()); JobDetail[] jobDetailarr = createJobDetail(jobDetails); List<Trigger> triggers = new ArrayList<>();
triggers.add(simpleTriggerFactoryBean(methodInvokingJobDetailFactoryBean()).getObject());
triggers.add(cronTriggerFactoryBean(jobDetailFactoryBean()).getObject()); Trigger[] triggerarr = createTriggers(triggers); jobConfigBean.setJobDetails(jobDetailarr);
jobConfigBean.setTriggers(triggerarr); return jobConfigBean;
} @Bean
public SchedulerFactoryBean schedulerFactoryBean(JobConfigBean jobConfigBean){ //一个定时任务
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setJobDetails(jobConfigBean.getJobDetails());
schedulerFactoryBean.setTriggers(jobConfigBean.getTriggers()); return schedulerFactoryBean;
} public static JobDetail[] createJobDetail(List<JobDetail> jobDetails){
JobDetail[] jobDetailArr = new JobDetail[jobDetails.size()];
for (int i = 0; i < jobDetails.size(); i++) {
jobDetailArr[i] = jobDetails.get(i);
} return jobDetailArr; } public static Trigger[] createTriggers(List<Trigger> triggers){
Trigger[] triggerarr = new Trigger[triggers.size()]; for (int i = 0; i <triggers.size() ; i++) {
triggerarr[i] = triggers.get(i);
} return triggerarr;
}
}
6. JobConfigBean.java
import org.quartz.JobDetail;
import org.quartz.Trigger; public class JobConfigBean { private JobDetail[] jobDetails; private Trigger[] triggers; public JobDetail[] getJobDetails() {
return jobDetails;
} public void setJobDetails(JobDetail[] jobDetails) {
this.jobDetails = jobDetails;
} public Trigger[] getTriggers() {
return triggers;
} public void setTriggers(Trigger[] triggers) {
this.triggers = triggers;
}
}
7. ScheduledJob.java
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component; @Component
public class ScheduledJob extends QuartzJobBean { private CronTriggerJob jobCornBean; @Override
protected void executeInternal(JobExecutionContext arg0)
throws JobExecutionException {
jobCornBean.printAnotherMessage();
} public void setJobCornBean(CronTriggerJob jobCornBean) {
this.jobCornBean = jobCornBean;
}
}
8.启动springboot 执行结果如下:

9. 代码下载地址:https://github.com/liuchunbo24/springboot-quartz
Springboot集成Quartz的更多相关文章
- SpringBoot集成Quartz实现定时任务
1 需求 在我的前后端分离的实验室管理项目中,有一个功能是学生状态统计.我的设计是按天统计每种状态的比例.为了便于计算,在每天0点,系统需要将学生的状态重置,并插入一条数据作为一天的开始状态.另外,考 ...
- SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null)
使用spring-boot作为基础框架,其理念为零配置文件,所有的配置都是基于注解和暴露bean的方式. Quartz的4个核心概念: 1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法v ...
- springBoot集成 quartz动态定时任务
项目中需要用到定时任务,考虑了下java方面定时任务无非就三种: 用Java自带的timer类.稍微看了一下,可以实现大部分的指定频率的任务的调度(timer.schedule()),也可以实现关闭和 ...
- Spring Boot笔记(三) springboot 集成 Quartz 定时任务
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1. 在 pom.xml 中 添加 Quartz 所需要 的 依赖 <!--定时器 quartz- ...
- SpringBoot集成Quartz实现定时器
SpringBoot+Quartz实现定时器,由于本人也是刚学习,不足之处请各位大神指正 .. 1.pom配置 <dependency> <groupId>org.sp ...
- springboot集成quartz定时任务课动态执行
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</ ...
- springboot集成quartz实现任务调度
quartz 概述 特点 强大的调度功能 灵活的应用方式 分布式和集群能力 用到的设计模式 Builder 模式 factory模式 组件模式 链式写法 体系结构 调度器 任务 触发器 架构图 spr ...
- springboot自带定时任务和集成quartz
1,springboot自带的定时任务 默认是单线程 有这个依赖就可以 <dependency> <groupId>org.springframework.boot</ ...
- SpringBoot整合Quartz定时任务(持久化到数据库)
背景 最近在做项目,项目中有个需求:需要使用定时任务,这个定时任务需要即时生效.查看Quartz官网之后发现:Quartz提供两种基本作业存储类型: RAMJobStore :RAM也就是内存,默认情 ...
随机推荐
- scrollview嵌套下拉控件嵌套recyclerview(不动第三方原基础自定义)
相信会碰到很多类似的需求,一个列表控件,然后控件上方的一个头部需要自定义,这样就不好有时候也不能加在列表控件的头部了,那必须得嵌套一层scrollview了,没毛病,那么一般的列表控件都是有上拉下拉的 ...
- Android Studio教程04-Task和Back stack
目录 1.Tasks and Back Stack 1.1. 当点击Back按钮返回到上一个Activity时发生了什么? 1.2. 点击HOME按钮 1.3.多次点击进入Activity-Back按 ...
- event 和delegate的分别
突然想起delegate委托是支持+= 和-=操作的,然后研究一下究竟这个是怎么做到的,好模仿一下.一开始以为是+=的运算符重载,但是在类库参考中并没有这个运算符重载,只有!= 和==运算符重载.有点 ...
- Android探究之ANR
什么是ANR ANR:Application Not Responding,即应用程序无响应. 在Android中,ActivityManagerService(简称AMS)和WindowManage ...
- thinkphp5.1验证器场景验证中传参的方法。
一个场景:用户保存自己的昵称,如果已经有其他用户用了这个昵称则不允许保存,但是要排除当前用户自己,因为如果用户未作修改,新昵称和老昵称一样,是可以保存的. 因为昵称定义了唯一规则: 'name' =& ...
- HTML+Css让网页自动适应电脑手机屏幕
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scal ...
- i春秋misc部分writeup
i春秋misc部分writeup 一.敲击 方方格格,然后看到下面的格式,猜测出是键盘上的布局,然后看这些字母形成的形状想那些字母,就是flag了 2.滴滴滴 放到ctfcack里解密,发现时栅栏密码 ...
- 洛谷-p4555
题意:给你一个串,问你以i结尾的回文串加上以i+1开头的回文串的最大长度 解题思路:回文自动机板子题,记录下每次正着添加字符的时候,当前字符能够到达的最大回文子串的长度和倒着添加字符的时候,能够到达的 ...
- sudo: no tty present and no askpass program specified
sudo: no tty present and no askpass program specified | 学步园 https://www.xuebuyuan.com/2157339.html 通 ...
- php框架之phalcon
1.开发助手 1) 下载 git clone https://github.com/phalcon/cphalcon.git git clone https://github.com/phalcon/ ...