当前位置: 首页 > news >正文

QUARTZ 石英框架

QUARTZ 石英框架

1.Quartz的概念

Quartz就是一个基于Java实现的任务调度框架,用于执行你想要执行的任何任务。
Quartz是OpenSymphony开源组织在Job scheduling(定时调度)领域的开源项目,它可以与J2EE和J2SE应用程序相结合也可以单独使用。

Quartz是开源且具有丰富特性的任务调度库,能够集成任何的Java应用。它能创建简单的或者复杂的调度任务,以执行上十,上百,上千,上万的任务。任务job被定义为标准的Java组件。能工执行任何你想要实现的功能。Quartz调度框架包含许多企业级的特性,如JTA事务,集群的支持。

官网:

Quartz对任务调度进行了高度抽象,提出了三个核心概念,并在org.quartz包中提供接口和类进行了描述

Quartz框架核心概念

  1. 任务:就是执行的工作内容,Quartz提供Job接口来支持任务定义
  2. 触发器:定义触发器Job执行的时间触发规则,Quartz提供Trigger类及其子类支持触发器功能
  3. 调度器:Quartz提供了Scheduler接口,将工作任务和触发器绑定,保证任务可以在正确的时间执行

Maven中Java项目搭建

第一步

引入依赖包

<!-- java 项目是这个版本呢 --><dependency><groupId>opensymphony</groupId><artifactId>quartz-all</artifactId><version>1.6.3</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.36</version></dependency><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.1</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency>

第二步 定时任务

/*** 创建任务    实现Job*/
public class MyJob implements Job {//核心方法@Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {System.out.println("我正在吃东西");}
}

Quartz中的触发器类型:SimpleTrigger和CronTrigger

测试1

/*** 创建SimpleTrigger触发器 测试启动*/
public class SimpleTrigger_Test {public static void main(String[] args) {// TODO: SimpleTrigger 执行的操作try{//1.定义任务对象                  名字                分组名        任务类JobDetail job = new JobDetail("MyJob","2085group", MyJob.class);//2.创建SimpleTrigger触发器                       名字            分组名字      类型                               时间SimpleTrigger trigger = new SimpleTrigger("Mytr","2085trigger",SimpleTrigger.REPEAT_INDEFINITELY,3000);//3.创建调度器SchedulerFactory factory = new StdSchedulerFactory();Scheduler scheduler = factory.getScheduler();//注册               任务对象  触发器scheduler.scheduleJob(job, trigger);//4.启动调度器scheduler.start();}catch (Exception e){e.printStackTrace();}}
}

测试2


/*** 使用CronTrigger  表达式由6~7位元素组成*/
public class CronTrigger_Test {public static void main(String[] args) {//TODO: CronTrigger 执行的操作try{//1.定义任务对象JobDetail job = new JobDetail("MyJob","2085group",MyJob.class);//2.创建SimpleTrigger触发器// 6位表达式   7位  第七位就是当前的年份,可以不屑// 弄一个 5-16日 14.40 不指定 2022年 执行CronTrigger trigger = new CronTrigger("MyJobtrg","2085trigger","0 40 14 16 5 ? 2022");//3.创建调度器SchedulerFactory factory = new StdSchedulerFactory();Scheduler scheduler = factory.getScheduler();//注册scheduler.scheduleJob(job, trigger);//4.启动调度器scheduler.start();}catch (Exception e){e.printStackTrace();}}
}

//TODO: 这个是提示是谁的

1. SimpleTrigger:定义间隔多长时间触发

2. CronTrigger:定义特定时间节点触发

  1. 要使用CronTrigger,必须掌握Cron表达式

    Cron表达式由6~7个由空格的时间元素组成。第七个元素是可选参数

Cron表达式位置的含义
  1.    		分钟
    
  1.    		小时
    
  1.    		月份中的那一天
    
  1.    		月份
    
  1.    		星期几
    
  1.    		年份
    
位置字段含义范围允许的特殊字符
10~59* /
2分钟0~59* /
3小时0~23* /
4月份中的哪一天0~31* / ? L
5月份1~12 或 JAN~DEC* /
6星期几1~7 或 SUN~SAT* / ? L #
7年份1970~2099* /

Cron表达式的每个字段,都可以显示地规定一个值(如果 49)、一个范围(如 1-6)、一个列表(如1,3,5)或者一个通配符 (如 *)

Cron表达式有几个特殊的字符
  • " - ":中划线,表示在一个范围
  • " ,": 使用逗号间隔的数据,表示一个列表
  • " * ":表示每一个值,它可以用于所有字段。例如:在小时字段表示每一个小时
  • " ? " 该字符仅用于 ”月份中的那一天“ 字段和 ”星期几“ 字段, 表示不指定值
  • " / ":通常表示位x/y, x为起始值,y表示值的增量。
  • " L":表示最后一天,仅在日期和星期字段使用
  • " # ":只能用于 ”星期几“ 字段,表示这个月的第几个周几。例如:”6#3“ 指这个月第三个周五

Spring 整合

配置任务

  1. 配置任务
  2. 配置触发器
  3. 配置调度器

SpringBoot 整合

第一步 导入Maven坐标

 	<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>4.3.18.RELEASE</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!--quartz石英框架--><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.2</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.32</version></dependency><dependency><groupId>commons-collections</groupId><artifactId>commons-collections</artifactId><version>3.1</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-io</artifactId><version>1.3.2</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency>

第二部 applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">
<!--配置任务--><bean id="task" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"><property name="jobClass" value="com.spring_quartz.MyJob"></property></bean>
<!--配置触发器--><bean id="trigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"><property name="jobDetail" ref="task"/><property name="repeatInterval" value="3000"/></bean><!--配置调度器--><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"><property name="triggers"><list><ref bean="trigger"></ref></list></property></bean>
</beans>

第三步 创建任务类

//任务类    继承QuartzJobBean
public class MyJob extends QuartzJobBean {@Override//核心方法protected void executeInternal(JobExecutionContext context) throws JobExecutionException {System.out.println("~~~妈妈喊我回家吃月饼");}
}

第四步 启动测试

public class test {public static void main(String[] args) {new ClassPathXmlApplicationContext("applicationContext.xml");}
}
http://www.lryc.cn/news/63189.html

相关文章:

  • 基于centos7:Harbor-2.7.2部署和安装教程
  • Windows上使用CLion配置OpenCV环境,亲测可用的方法(一)
  • 代码随想录算法训练营第四十三天
  • 如何在 Mac 和 Windows 上恢复未保存或删除的 PDF
  • windows开机不自动挂载磁盘的方法
  • 5 款 AI 老照片修复工具的横向比较
  • 2023企业服务的关键词:做强平台底座
  • 【Linux基本指令和权限(1)】
  • 虹科新品 | 用于医疗应用的压力和气体流量传感器
  • 原生小程序如何使用pdf.js实现查看pdf,以及关键词检索高亮
  • 「数据架构」MDM实现失败的主要原因
  • 【Java基础 1】Java 环境搭建
  • 2023-4-26-C++11新特性之正则表达式
  • python接口自动化测试 requests库的基础使用
  • Photon AI Translator 和做产品的一些思考
  • IPTV系统架构的分析与研究
  • workerman开发者必须知道的几个问题
  • golang Gin实现websocket
  • 冯·诺依曼体系结构与初始操作系统
  • 软件测试之黑盒测试的具体方法详解
  • 图形编辑器:历史记录设计
  • ubuntu22.04下挂载第二块硬盘
  • 举例说明.net中in与out的作用与区别
  • Java常见的100道面试题(内附答案及代码示例)持续更新
  • 策略设计模式知多少
  • 第三十九章 配置镜像 - 配置 ISCAgent - 在 UNIX Linux 和 macOS 系统上为非根实例启动 ISCAgent
  • 嵌入式安卓开发:使用Camera2获取相机
  • 阿里云g8i服务器Intel Xeon(Sapphire Rapids) Platinum 8475B
  • 设计模式——组件协作模式之观察者模式
  • 观察者设计模式知多少