一、Quartz的介绍以及Quartz的使用思路

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。

  • job - 任务 - 你要做什么事?
  • Trigger - 触发器 - 你什么时候去做?
  • Scheduler - 任务调度 - 你什么时候需要去做什么事?

二、Quartz的简单使用

1.导入依赖

<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz-jobs</artifactId><version>2.2.1</version></dependency>

2.创建任务类

package com.fync.quartz;import java.text.SimpleDateFormat;
import java.util.Date;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
/*** 创建要被定执行的任务类**/
public class MyJob implements Job{public void execute(JobExecutionContext context)throws JobExecutionException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");System.out.println(sdf.format(new Date()));}}
3.创建任务调度及执行
package com.fync.quartz;import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;/*** 创建任务调度,并执行*/
public class MainScheduler {//创建调度器public static Scheduler getScheduler() throws SchedulerException{SchedulerFactory schedulerFactory = new StdSchedulerFactory();return schedulerFactory.getScheduler();}public static void schedulerJob() throws SchedulerException{//创建任务JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();//创建触发器 每3秒钟执行一次Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group3").withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(3).repeatForever()).build();Scheduler scheduler = getScheduler();//将任务及其触发器放入调度器scheduler.scheduleJob(jobDetail, trigger);//调度器开始调度任务scheduler.start();}public static void main(String[] args) throws SchedulerException {MainScheduler mainScheduler = new MainScheduler();mainScheduler.schedulerJob();}}

三、整合springBoot

1、导入依赖

 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--定时器依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>5.1.5.RELEASE</version></dependency></dependencies>

2.配置类

package com.config;
import com.JobScheduled.QuartzDemo;
import org.quartz.SimpleTrigger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.JobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;/*** Quartz配置类*/
@Configuration
public class QuartzConfig {//    1.创建Job对象@Beanpublic JobDetailFactoryBean jobDetailFactoryBean() {JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
//        关联自己的类factoryBean.setJobClass(QuartzDemo.class);return factoryBean;}//    2.创建Trigger对象(简易版)@Beanpublic SimpleTriggerFactoryBean simpleTriggerFactoryBean( JobDetailFactoryBean jobDetailFactoryBean) {SimpleTriggerFactoryBean factoryBean = new SimpleTriggerFactoryBean();
//        关联jobDetail对象factoryBean.setJobDetail(jobDetailFactoryBean.getObject());
//        该参数表示一个执行的毫秒数factoryBean.setRepeatInterval(2000);
//        设置重复次数factoryBean.setRepeatCount(5);return factoryBean;}//    3.创建Scheduler对象@Beanpublic SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean){SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();factoryBean.setTriggers(simpleTriggerFactoryBean.getObject());return factoryBean;}
}

3.定时任务类

package com.JobScheduled;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;/*** Job类*/
public class QuartzDemo implements Job {@Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {System.out.println("Quartz定时任务");}
}

4、开启定时任务

@SpringBootApplication
//开启定时任务
@EnableScheduling
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}

四:多任务

/*** 第一个任务*///    1.创建Job对象@Bean(name = "oneJobDetail")public MethodInvokingJobDetailFactoryBean OneJobDetail(OneJob oneJob) {MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();// 是否并发执行jobDetail.setConcurrent(true);// 为需要执行的实体类对应的对象jobDetail.setTargetObject(oneJob);// 需要执行的方法jobDetail.setTargetMethod("task");return jobDetail;}//    2.创建Trigger对象(简易版)@Bean(name = "oneTrigger")public SimpleTriggerFactoryBean OneSimpleTrigger(JobDetail oneJobDetail) {SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();// 设置任务启动延迟trigger.setStartDelay(0);
//        关联jobDetail对象trigger.setJobDetail(oneJobDetail);
//        该参数表示一个执行的毫秒数trigger.setRepeatInterval(2000);
//        设置重复次数(-1=无限次)trigger.setRepeatCount(2);return trigger;}/*** 第二个任务*/@Bean(name = "twoJobDetail")public MethodInvokingJobDetailFactoryBean twoJobDetail(TwoJob twoJob) {MethodInvokingJobDetailFactoryBean jobdetail = new MethodInvokingJobDetailFactoryBean();jobdetail.setConcurrent(true);jobdetail.setTargetObject(twoJob);jobdetail.setTargetMethod("task");return jobdetail;}//    2.创建Trigger对象(简易版)@Bean(name = "twoTrigger")public SimpleTriggerFactoryBean twoSimpleTrigger(JobDetail twoJobDetail) {SimpleTriggerFactoryBean trigger = new SimpleTriggerFactoryBean();trigger.setJobDetail(twoJobDetail);trigger.setRepeatInterval(2000);trigger.setRepeatCount(3);return trigger;}//    3.创建Scheduler对象@Beanpublic SchedulerFactoryBean schedulerFactoryBean(Trigger oneTrigger, Trigger twoTrigger) {SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();factoryBean.setTriggers(oneTrigger, twoTrigger);return factoryBean;}

任务类@Component装配上即可

  • 第一种实现:
  • 1.任务类继承job 实现execute方法
  • 2.将任务类扔进 JobDetailFactoryBean(不够灵活)
  • 第二种实现:
  • 1.任务类 @Component 装配
  • 2.将任务类扔进 MethodInvokingJobDetailFactoryBean
  • 相比第一种更方便,定位更准确,针对方法体,易于多任务并发执行

总结:一般复杂的任务定时调度,才会考虑Quartz,去做数据持久化,以上只是简单的实现Quartz,
定时任务简单的情况下,建议使用spring3.0自带的定时:@Scheduled

参考:Spring Boot 中实现定时任务的常用方式@Scheduled

SpringBoot 整合 Quartz 实现 JAVA 定时任务的动态配置

Spring Boot 中实现定时任务的常用方式--Quartz相关推荐

  1. Spring Boot:在Spring Boot中使用定时任务

    2019独角兽企业重金招聘Python工程师标准>>> 本文主要介绍如何在Spring Boot中使用定时任务,假设你已经建好了一个基础的Spring Boot项目.首先,我们在项目 ...

  2. 【Spring Security】解答Spring Boot 中密码加密的正确方式?

    Spring Boot 项目中密码如何加密 先说一句:密码是采用非对称加密是无法解密的.密码无法解密,还是为了确保系统安全.今天就来和大家聊一聊,密码要如何处理,才能在最大程度上确保我们的系统安全.密 ...

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

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

  4. springboot初始化逻辑_详解Spring Boot中初始化资源的几种方式

    假设有这么一个需求,要求在项目启动过程中,完成线程池的初始化,加密证书加载等功能,你会怎么做?如果没想好答案,请接着往下看.今天介绍几种在Spring Boot中进行资源初始化的方式,帮助大家解决和回 ...

  5. SpringBoot - Spring Boot 中的配置体系Profile全面解读

    文章目录 Pre Spring Boot 中的配置体系 配置文件与 Profile 主 application.properties 中指定激活的Profile Profile 配置信息只保存在一个文 ...

  6. Spring Boot中的一些常用配置介绍!

    这篇教程将为你介绍Spring Boot 中的一些常用配置,比如:自定义 Banner.配置日志.关闭特定的自动配置等. 自定义Banner 在 Spring Boot 启动的时候会有一个默认的启动图 ...

  7. 在Spring Boot中使用@Scheduled实现定时任务

    2019独角兽企业重金招聘Python工程师标准>>> 在Spring Boot中使用@Scheduled实现定时任务 之前没有使用Spring Boot的Java风格配置的时候,用 ...

  8. java 方式配置ssm,关于SSM以及Spring boot中对于Spring MVC配置的问题

    SSM中 Spring MVC配置 传统的web.xml配置 web.xml contextConfigLocation classpath*:applicationContext.xml org.s ...

  9. RabbitMQ(六)——Spring boot中消费消息的两种方式

    前言 上一篇博客中,我们只是简单总结了Spring boot中整合RabbitMQ的操作,针对消息消费的两种方式只是简单给了一个实例,这篇博客,我们进一步总结关于Spring boot消息消费的相关功 ...

  10. Spring Boot 中的热部署方式总结

    1 Spring Boot 的热部署方式 1.模板热部署 在 Spring Boot 中,模板引擎的页面默认是开启缓存的,如果修改了页面的内容,则刷新页面是得不到修改后的页面的,因此我们可以在appl ...

最新文章

  1. python有没有中文版-python有中文版吗
  2. lastpass密码管理工具使用教程
  3. Google图解:Chrome 快是有原因的,科普浏览器架构!
  4. sql创建计算机用户,2015年计算机四级数据库复习要点:SQL Server 登录账户
  5. 通过Yeoman快速搭建AngularJS webapp应用的实践
  6. setwindowpos怎么改变z序_【情感问答】||朋友圈子小,沉默寡言嘴不甜,情商低,该怎么脱单?...
  7. Spring的IOC理解(转载)
  8. Testbench编写方法
  9. SVN客户端的安装与使用----第一章
  10. python爬取别人qq空间相册_Python网络爬虫5 - 爬取QQ空间相册
  11. Python爬虫自己写项目之:爬取火车站的时刻表和票务信息
  12. 手把手教你学五笔打字输入法之1(如何快速巧记五笔字型字根表篇)
  13. 旧文重发:从第三方服务角度看各公司技术部门如何正确计算投入产出比~
  14. linux 重启apache:apachectl -k graceful
  15. stm32f407Zgt6 与 hc05蓝牙模块通信
  16. 【12月原创】RT-thread - 柿饼UI —— 网络流媒体播放器
  17. 在线AES加密/解密工具
  18. JAVA 根据模板生成doc文件
  19. 计算机插补,第三章计算机数控装置的插补原理.doc
  20. 基于 QT 开发的联机五子棋

热门文章

  1. mysql 主从复制延迟_什么情况会导致MySQL主从复制延迟?
  2. 引入外部less_CSS扩展语言sass和less应该选哪个?
  3. C/C++[codeup 1929,]今天星期几
  4. 算法:Invert Binary Tree(翻转二叉树)
  5. 基于PCA降维实现人脸识别
  6. axios token失效刷新token怎么重新请求_Token 刷新并发处理解决方案
  7. php5中使用xslt扩展,.NET_解析在.net中使用XSLT转换xml文档的示例详解,XSL即可扩展的样式表文件。 可 - phpStudy...
  8. java编程给三个数字排序_JAVA程序.输入3个数字,有IF语句,从小到大排序
  9. 【从线性回归到BP神经网络】第二部分:线性回归
  10. Boost组件lexical_cast