之前学习过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的更多相关文章

  1. SpringBoot集成Quartz实现定时任务

    1 需求 在我的前后端分离的实验室管理项目中,有一个功能是学生状态统计.我的设计是按天统计每种状态的比例.为了便于计算,在每天0点,系统需要将学生的状态重置,并插入一条数据作为一天的开始状态.另外,考 ...

  2. SpringBoot集成Quartz(解决@Autowired空指针Null问题即依赖注入的属性为null)

    使用spring-boot作为基础框架,其理念为零配置文件,所有的配置都是基于注解和暴露bean的方式. Quartz的4个核心概念: 1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法v ...

  3. springBoot集成 quartz动态定时任务

    项目中需要用到定时任务,考虑了下java方面定时任务无非就三种: 用Java自带的timer类.稍微看了一下,可以实现大部分的指定频率的任务的调度(timer.schedule()),也可以实现关闭和 ...

  4. Spring Boot笔记(三) springboot 集成 Quartz 定时任务

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1. 在 pom.xml 中 添加 Quartz 所需要 的 依赖 <!--定时器 quartz- ...

  5. SpringBoot集成Quartz实现定时器

    SpringBoot+Quartz实现定时器,由于本人也是刚学习,不足之处请各位大神指正 .. 1.pom配置   <dependency>   <groupId>org.sp ...

  6. springboot集成quartz定时任务课动态执行

    <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</ ...

  7. springboot集成quartz实现任务调度

    quartz 概述 特点 强大的调度功能 灵活的应用方式 分布式和集群能力 用到的设计模式 Builder 模式 factory模式 组件模式 链式写法 体系结构 调度器 任务 触发器 架构图 spr ...

  8. springboot自带定时任务和集成quartz

    1,springboot自带的定时任务  默认是单线程 有这个依赖就可以 <dependency> <groupId>org.springframework.boot</ ...

  9. SpringBoot整合Quartz定时任务(持久化到数据库)

    背景 最近在做项目,项目中有个需求:需要使用定时任务,这个定时任务需要即时生效.查看Quartz官网之后发现:Quartz提供两种基本作业存储类型: RAMJobStore :RAM也就是内存,默认情 ...

随机推荐

  1. android WebView技术笔记(存储技术)

    作为刚刚开始工作的新手程序猿,各种知识还不算熟练,所以将学习到的知识记录一下以免以后忘记. WebView加载h5的知识现在可以说非常的常用,通过加载h5的网页可以在不更新app的情况下来更新app的 ...

  2. 一种解决Android studio 3.0 Build报错的方法

    问题背景: 最近在开始使用AndroidStudio3.0,刚好有一个开源的项目(Material-Movies),需要学习下.因为该项目比较早(2015年),而这段时间AndroidStudio和G ...

  3. linux子系统折腾记 (二)

    今天一早起床,打开debian,居然出现 错误: 0x80070040 .不知道是怎么回事,网上有篇文章详细介绍了windows linux子系统,打算参考来做做:https://www.jiansh ...

  4. Delphi IfThen语句

    function IfThen(AValue: Boolean; const ATrue: string; AFalse: string = ''): string; overload; $[StrU ...

  5. Linux学习历程——Centos 7 find 命令

    一.命令介绍 find 命令用于按照指定条件来查找文件. 一些比较常用参数如下表 参数 作用 -name 匹配名称 -perm 匹配权限mode为完全匹配( –mode包含即可) -user 匹配所有 ...

  6. 【学习记录】第一章 数据库设计-《SQL Server数据库设计和开发基础篇视频课程》

    一.课程笔记 1.1  软件开发周期 (1)需求分析阶段 分析客户的业务和数据处理需求. (2)概要设计阶段 设计数据库的E-R模型图,确认需求信息的正确和完整. /* E-R图:实体-关系图(Ent ...

  7. Vue-cli在webpack内使用雪碧图(响应式)

    先执行install cnpm install webpack-spritesmith 文件位置 build\webpack.dev.conf.js 添加内容: const SpritesmithPl ...

  8. CMake与Make最简单直接的区别 [转]

    写程序大体步骤为: 1.用编辑器编写源代码,如.c文件. 2.用编译器编译代码生成目标文件,如.o. 3.用链接器连接目标代码生成可执行文件,如.exe. 但如果源文件太多,一个一个编译时就会特别麻烦 ...

  9. openstack 2019/4/28

    官网参考地址:https://docs.openstack.org/keystone/queens/install/index-rdo.html (但愿能看懂) 环境:这个部分解释如何按示例架构配置控 ...

  10. 使用redis可能出现的问题

    1)缓存与数据库双写不一致 2)缓存雪崩 3)缓存穿透 由于缓存中不存在某个key,所有的请求都会落到数据库上,会对数据库造成很大压力,甚至崩溃 一个简单的方案是将不存在的数据也缓存起来(value值 ...