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也就是内存,默认情 ...
随机推荐
- DbGridEh根据某一个字段的值显示对应底色或字体变化
改变行底色: procedure TForm1.dggrideh1DrawColumnCell(Sender: TObject;const Rect: TRect; DataCol: Integer; ...
- 【HANA系列】SAP HANA XS使用JavaScript编程详解
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Jav ...
- 我的Windows日常——炫酷的windows组件命令行打开方式
regedit -------注册表编辑器 gpedit.msc-------组策略编辑器 secpol.msc--------本地安全策略 control ----------控制面板 cmd--- ...
- Core官方DI解析(3)-ServiceCallSite.md
上一篇说过在整个DI框架中IServiceProviderEngine是核心,但是如果直接看IServiceProviderEngine派生类其实看不出也没什么东西,因为这个类型其实都是调用的其它对象 ...
- [认证授权] 1.OAuth2授权
1 OAuth2解决什么问题的? 举个栗子先.小明在QQ空间积攒了多年的照片,想挑选一些照片来打印出来.然后小明在找到一家提供在线打印并且包邮的网站(我们叫它PP吧(Print Photo缩写
- ASP.NET Core 使用 Google 验证码(Google reCAPTCHA)
关心最多的问题,不FQ能不能用,答案是能.Google官方提供额外的域名来提供服务,国内可以正常使用. 一. 前言 验证码在我们实际的生活场景中非常常见,可以防止恶意破解密码.刷票.论坛灌水.刷注册等 ...
- Nonlinear Component Analysis as a Kernel Eigenvalue Problem
目录 引 kernel PCA kernel 的选择 性质 一些问题 代码 Scholkopf B, Smola A J, Muller K, et al. Nonlinear component a ...
- [Alpha阶段]第八次Scrum Meeting
Scrum Meeting博客目录 [Alpha阶段]第八次Scrum Meeting 基本信息 名称 时间 地点 时长 第八次Scrum Meeting 19/04/12 新主楼F座2楼 35min ...
- MR 实例
二次排序 点击复制代码:https://www.cnblogs.com/JBLi/p/10764535.html 将上面的代码改成两个 分区 展示的数据 相同的不在一个分区 怎么解决点击查看没有 ...
- Python——pyqt5——消息框(QMessageBox)
一.提供的类型 QMessageBox.information 信息框 QMessageBox.question 问答框 QMessageBox.warning 警告 QMessageBox.ctit ...