quartz

quartz在job间隔期间内,保证上一个任务执行完后,再去调度下一个任务

荒凉一梦 提交于 2019-11-27 12:42:07
Quartz定时任务默认都是并发执行的,不会等待上一次任务执行完毕,只要间隔时间到就会执行,这样往往会导致我们执行的数据不正确。如果定时任执行太长,会长时间占用资源,导致其它任务堵塞。 解决办法: 1.在Spring中这时需要设置concurrent的值为false, 禁止并发执行。 <property name="concurrent" value="true" /> 2.当不使用spring的时候就需要在Job的实现类上加@DisallowConcurrentExecution的注释 @DisallowConcurrentExecution 禁止并发执行多个相同定义的JobDetail, 这个注解是加在Job类上的, 但意思并不是不能同时执行多个Job, 而是不能并发执行同一个Job Definition(由JobDetail定义), 但是可以同时执行多个不同的JobDetail, 举例说明,我们有一个Job类,叫做SayHelloJob, 并在这个Job上加了这个注解, 然后在这个Job上定义了很多个JobDetail, 如sayHelloToJoeJobDetail, sayHelloToMikeJobDetail, 那么当scheduler启动时, 不会并发执行多个sayHelloToJoeJobDetail或者sayHelloToMikeJobDetail,

Quartz-第一篇认识Quartz

怎甘沉沦 提交于 2019-11-27 09:42:37
1、什么是Quartz Quartz是一个任务调度框架,借助Corn表达式,Quartz可以支持各种复杂的任务调度。JDK中也提供了简单的任务调度,java.time.Timmer。 2、Quartz运行的基本属性 quartz有一个默认的配置文件quartz.properties,放置于quartz-2.2.2.jar中的org\quartz下。如果需要改变默认的配置,可以自己创建一个,将其放置于系统的类加载路径下,ClassLoader会自动加载并启动其中的属性。 查看其中内容: # Default Properties file for use by StdSchedulerFactory # to create a Quartz Scheduler Instance, if a different # properties file is not explicitly specified. # #配置主调度器属性 org.quartz.scheduler.instanceName: DefaultQuartzScheduler org.quartz.scheduler.rmi.export: false org.quartz.scheduler.rmi.proxy: false org.quartz.scheduler

在 Spring 中使用 Quartz

ε祈祈猫儿з 提交于 2019-11-27 08:48:01
Spring 为创建 Quartz 的 Scheduler、Trigger 和 JobDetail 提供了便利的 FactoryBean 类,以便能够在 Spring 容器中享受注入的好处。此外,Spring 还提供了一些便利工具类,用于直接将 Spring 中的 Bean 包装成合法的任务。Spring 进一步降低了使用 Quartz 的难度,能以更具风格的方式使用 Quartz。概括来说,Spring 提供了两方面的支持。 (1)为 Quartz 的重要组件类提供更具 Bean 风格的扩展类。 (2)提供创建 Scheduler 的 BeanFactory 类,方便在 Spring 环境下创建对应的组件对象,并结合 Spring 容器生命周期执行启动和停止的动作。 1.创建JobDetail 用户可以直接使用 Quartz 的 JobDetail 在 Spring 中配置一个 JobDetail Bean,但是 JobDetail 使用带参的构造函数,对于习惯通过属性配置的 Spring 用户来说存在使用上的不便。为此,Spring 通过扩展 JobDetail 提供了一个更具 Bean 风格的 JobDetailFactoryBean。 此外,Spring 还提供了一个 MethodInvokingJobDetailFactoryBean,通过这个

org.quartz-scheduler 代码分析

社会主义新天地 提交于 2019-11-27 08:03:11
Scheduler 通过调度器工厂 SchedulerFactory 的实例对象 StdSchedulerFactory 构建Scheduler ; 从指定的文件初始化配置信息(默认文件名"quartz.properties", 系统变量为"org.quartz.properties") 定义的默认执行QuartzSchedulerThread的线程池为: org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool 一般返回 StdScheduler ,但核心是 QuartzScheduler ! StdSchedulerFactory. instantiate() 很重要! 初始化 RAMJobStore 、 SimpleThreadPool 、 QuartzScheduler 、 JobFactory 、 SchedulerPlugin 、 JobRunShellFactory 、 QuartzSchedulerResources 等对象,返回StdScheduler实例。 QuartzScheduler核心: 线程对象 QuartzSchedulerThread 。随着Scheduler实例化而被创建并扔进线程池执行。 该线程就是调度线程,主要任务就是不停的从JobStore中获取即将被触发的触发器来执行。

Spring中使用quartz

谁都会走 提交于 2019-11-27 08:02:59
1.Quartz基础 quartz对任务调度核心领域问题惊醒了高度抽象,提出了调度器,任务,和触发器这三个核心概念,并在org.quartz通过接口和类对核心概念进行描述。 Scheduler 接口: quartz的执行线程,它根据Trigger决定调度时刻,根据JobDetail的说明实例化并运行Job JobDetail 类: 可持久化的任务描述信息。任务虽然分组,但是仅用作管理标示,任务之间并无实质性关联, 例如无法定义job chain。 Trigger 类:任务的调度策略。这里的特点是调度策略与任务描述分开,调度策略和任务描述都可以分别在Scheduler注册,然后再关联起来。JobDetail与Trigger的关系是一对多。 JobDataMap : 将任务的运行时可持久化状态信息从JobDetail类中分离出来 Job 接口 : 任务的执行代码 StatefulJob 接口: 无状态任务对应的JobDataMap可以认为是只读的,而有状态的任务在多次执行过程中保留对JobDataMap所作的修改,一个后果是有状态任务无法被并发执行。 JobExecutionException 类: 可以通过JobExecutionException调整调度程序的下一步动作 Calendar 接口: 用于从trigger的调度计划中排除某些时间段,例如假期等。 ThreadPool:

springboot 整合quartz (一):基础使用

帅比萌擦擦* 提交于 2019-11-27 08:02:44
介绍 Quartz是一个开源的 作业调度 框架,它完全由 Java 写成。它有很多特征,如:数据库支持,集群,插件,EJB作业预构 建,JavaMail及其它,支持 cron-like表达式 等等。该项目已经被 Terracotta 收购。 Quartz API 介绍 Quartz API关键几个接口如下: 接口类对象: Scheduler:跟任务调度相关的最主要的API接口。 Job:你期望任务调度执行的组件定义(调度器执行的内容),都必须实现该接口。 Trigger:定义一个指定的Job何时被执行的组件,也叫触发器。 用于创建示例的对象: JobDetail:用来定义Job的实例。 JobBuilder:用来定义或创建JobDetail的实例,JobDetail限定了只能是Job的实例。 TriggerBuilder:用来定义或创建触发器的实例。 环境 idea maven springboot 案例 入门案例-1 说多少也不如直接运行代码出结果来的实际,那就动手了。 pom.xml 配置如下: <!-- quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> </dependency> <dependency> <groupId>org

Quartz

和自甴很熟 提交于 2019-11-27 07:16:42
这里是修真院后端小课堂,每篇分享文从 八个方面深度解析后端知识/技能,本篇分享的是: 【Quartz】 【修真院Java小课堂】任务调度-Quartz 开场语: 大家好,我是IT修真院北京分院第32期的学员廖友,一枚正直纯洁善良的Java程序员,今天给大家分享一下,修真院官网Java任务十中的知识点——任务调度-Quartz 一、背景介绍: 1、任务调度概念 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。 2、任务调度应用场景 场景一:聚划算 整点抢红包 场景二:双十一实时统计交易额 以上两种场景都可以通过定时任务来实现,分别是按按指定时间执行任务、固定频率执行任务两种。 3、任务调度的几种Java实现 Timer ScheduledExecutor Spring Scheduled 开源工具包 Quartz 开源工具包 JCronTab 二、知识剖析: 1、Quartz核心概念 任务Job:做什么工作 触发器Trigger:什么时候工作 调度器Scheduler:将Job和Trigger整合到一块创建一个作业计划,即什么时候做什么事 2、Quartz的几个核心接口 Job是一个接口,只有一个方法execute,定义作业时需要实现此接口的execute方法。 JobDetail:JobDetail是一个接口

Spring中Quartz的配置详解(转)

▼魔方 西西 提交于 2019-11-27 04:17:29
转自: http://www.cnblogs.com/kay/archive/2007/11/02/947372.html Spring中Quartz的配置 Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,下面就看看在Spring中怎样配置Quartz: 首先我们来写一个被调度的类: package com.kay.quartz; public class QuartzJob { public void work() { System.out.println( " Quartz的任务调度!!! " ); } } Spring的配置文件: <? xml version="1.0" encoding="UTF-8" ?> <! DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" > < beans > <!-- 要调用的工作类 --> < bean id ="quartzJob" class ="com.kay.quartz.QuartzJob" ></ bean > <!-- 定义调用对象和调用对象的方法 --> < bean id ="jobtask" class ="org

Quartz 触发器(SimpleTrigger&CronTrigger )配置说明 & cronExpression表达式 转

家住魔仙堡 提交于 2019-11-27 04:17:12
转自: http://djkin.iteye.com/blog/1714323 每天8:32,12:32 执行一次,启动的时候执行一次; Java代码 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" > <beans default -lazy-init= "false" > <bean id= "weekTimer" class = "com.chanceit.weather.WeatherHarvestListener" ></bean> <bean id= "weekJobDetailFactoryBean" class = "org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean" > <property name= "targetObject" ref= "weekTimer" /> <property name= "targetMethod" value= "main" /> <property name= "concurrent" value= "false" /> </bean> <bean id=

SpringBoot整合Quartz定时任务

眉间皱痕 提交于 2019-11-27 02:53:20
记录一个SpringBoot 整合 Quartz 的Demo实例 POM.XML文件 <!-- 定时器任务 quartz需要导入的坐标 --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>1.8.5</version> </dependency> 类似于控制器代码: package com.xiaowu.quartz.demo; import java.util.Date; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; /*** * * Quartz设置项目全局的定时任务 * * @Component注解的意义 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。一般公共的方法我会用上这个注解 * * * @author WQ * */ @Component public class QuartzDemo { @Scheduled(cron = "0 0/1 * * * ?") // 每分钟执行一次 public void work() throws