Quartz的使用

article/2025/8/22 13:36:51

什么是Quartz

Quartz是一个由java编写的开源作业调度框架,简单来说,Quartz就是启动定时任务的框架,像linux系统中的corntab,可以定时启动任务.

Quartz的单独使用

Quartz的使用必须掌握下面三个对象

  1. Scheduler 定时器对象
  2. JobDetail 任务对象
  3. Trigger 触发器对象
    SimpleTrigger 简单触发器
    CornTrigger任务调度触发器
    使用
    导入Maven坐标
<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>

工作对象

//要实现Job接口
public class HelloJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {System.out.println("Hello Quartz~~~");}}

测试用例

	     //定时器对象Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();//定义一个工作对象 设置工作名称与组名JobDetail job =JobBuilder.newJob(HelloJob.class).withIdentity("job41","group1").build();		 //定义一个触发器 简单Trigger 设置工作名称与组名 5秒触发一次Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1","group1").startNow().withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5)).build();//定义一个任务调度的Trigger 设置工作名称与组名 每天的24:00触发一次//Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1","group1").withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 * * ?")).build();//设置工作 与触发器scheduler.scheduleJob(job, trigger);// and start it off//开始定时任务scheduler.start();

CornTrigger表达式的写法
* * * * * *
分别代表秒、分、时、日、月、周
例子:
0 0 12 ? * 3 每周二中午 12 点执行任务
0 0 0 0 * ? 每月 1 日 0 点执行任务
测试结果
在这里插入图片描述

Quartz与spring的整合

导入Quartz和Spring的Maven依赖

<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><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.1.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.1.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>4.1.7.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>4.1.7.RELEASE</version></dependency>

配置ApplicationContext文件

 	<!-- 扫描包 --><context:component-scan base-package="包名"></context:component-scan><!-- job --><bean id="helloJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"><property name="jobClass" value="cn.lzh.quartz.job.HelloJob"></property></bean><!-- trigger --><bean id="simpleTriger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"><property name="jobDetail" ref="helloJob"></property><!-- 三秒后执行 --><property name="startDelay" value="3000"></property><!-- 五秒重复执行一次 --><property name="repeatInterval" value="5000"></property></bean><!-- scheduler  --><bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!--  		<property name="jobFactory" ref="jobFactory" ></property>--> 		<property name="triggers"><list><ref bean="simpleTriger"/></list></property></bean>

Job对象

public class HelloJob implements Job {/*@Autowiredprivate HelloService helloService;*/@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {
/*		helloService.sayHello();
*/		System.out.println("hello,job Spring");}
}

Quartz与spring整合Bean无法注入的问题
当Quartz要注入Spring Bean对象时,会报错,因为Job对象不是Spring进行管理的,当job对象中注入Spring Bean会产生空指针异常 即无法注入

在这里插入图片描述
解决办法: 写一个JobFactory ,在ApplicationContext 中配置jobFactory,由JobFactory生成job时候,自动注入Spring Bean对象

JobFactory

@Service("jobFactory")
public class JobFactory extends AdaptableJobFactory {@Autowiredprivate AutowireCapableBeanFactory capableBeanFactory;@Overrideprotected Object createJobInstance(TriggerFiredBundle bundle)throws Exception {Object jobInstance = super.createJobInstance(bundle);capableBeanFactory.autowireBean(jobInstance);return jobInstance;}
}

在Secheduler中配置jobFactory
在这里插入图片描述

测试结果
运行maven项目的时候,自动开启Scheduler
在这里插入图片描述
测试成功


http://chatgpt.dhexx.cn/article/fb1f2a2v.shtml

相关文章

Quartz 配置详解

Quartz自定义配置详解&#xff08;一&#xff09;——实现自定义配置 - 掘金通过默认配置下的quartz信息输出可以看到&#xff0c;quartz默认不支持数据的持久化&#xff0c;且无集群支持&#xff1b;但是在实际项目使用中&#xff0c;为了保证相关数据的准确和定时任务执行稳定…

quartz详解

quartz 一、Quartz相关介绍 1.简介  1.1 Quartz 是一个完全由 Java 编写的开源作业调度框架&#xff0c;为在 Java 应用程序中进行作业调度提供了简单却强大的机制。  1.2 Quartz 可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。  1.3 Quartz 允许程序开发人员根据时间…

【开发经验】quartz表结构说明(字段说明)

文章目录 一、quartz表信息二、表字段说明1.qrtz_blob_triggers2.qrtz_calendars3.qrtz_cron_triggers4.qrtz_fired_triggers5.qrtz_job_details6. qrtz_locks7.qrtz_paused_trigger_grps8. qrtz_scheduler_state9.qrtz_simple_triggers10.qrtz_triggers 一、quartz表信息 qrt…

Quartz简介

文章目录 Quartz 是什么What is the Quartz Job Scheduling Library?使用场景特点Quartz 使用的设计模式 Java 语言实现定时任务的几种方式核心元素SchedulerTriggerCalendarJobDetailJobJobExecutionContext 核心元素之间的关系Quartz 类图主要线程数据存储 最近做了一个活动…

【quartz表结构及说明】

文章目录 一、quartz表信息二、表字段说明 1.qrtz_blob_triggers2.qrtz_calendars3.qrtz_cron_triggers4.qrtz_fired_triggers5.qrtz_job_details6. qrtz_locks7.qrtz_paused_trigger_grps8. qrtz_scheduler_state9.qrtz_simple_triggers10.qrtz_triggers 一、quartz表信息 qr…

Quartz数据库表分析

2019独角兽企业重金招聘Python工程师标准>>> 系列文章 Spring整合Quartz分布式调度 Quartz数据库表分析 Quartz调度源码分析 前言 上一篇文章Spring整合Quartz分布式调度介绍了Quartz通过数据库的方式来实现分布式调度&#xff0c;通过使用数据库来存储trigger&…

php rsa公钥加密,PHP RSA加密

这两天正好做一个rsa加密,现在就总结一下其中的几个要点。 1.什么是rsa算法 RSA公钥加密算法是1977年由罗纳德李维斯特(Ron Rivest)、阿迪萨莫尔(Adi Shamir)和伦纳德阿德曼(Leonard Adleman)一起提出的。1987年7月首次在美国公布,当时他们三人都在麻省理工学院工作实习。RSA…

php 代码加密运行,php加密后可以直接运行吗

加密后的php代码需要ZendGuardLoader模块才能正常运行 下载ZendGuardLoader压缩包 下载好后解压压缩包&#xff0c;找到目录下的 ZendLoader.dll 文件&#xff0c;将它放到你的php目录下ext下&#xff0c;再编辑php.ini文件&#xff0c;添加一段代码&#xff1a;[Zend.loader] …

PHP加密 php源代码在线加密工具推荐

在我们开发的项目中&#xff0c;有一部分可能是用于商业用途&#xff0c;会部署在客户提供的机器环境中。因为 PHP 本身是解释型语言&#xff0c;所以未进行处理的代码&#xff0c;就会有泄露或被修改的风险。那么我们可能会想到最简单有效的方法就是进行PHP代码的加密&#xf…

PHP数据加密的几种方式

首先我们来了解一下为什么要加密&#xff1f; 在网络通信的过程中攻击者可以伪造请求和返回&#xff0c;从而达到不可告人的目的。如下图所示&#xff1a; 数据加密之后可以防止他人监听窃取信息以及通讯内容被篡改。 了解了加密的作用&#xff0c;我再来说说加密的方式&…

php代码加密 php-screw-plus

1.下载本程序并解压到某个目录 下载 https://gitee.com/splot/php-screw-plus 2.解压 3.编译 进入目录 /usr/local/php/bin/phpize &#xff08;在screw plus目录中执行php bin中的phpize自动生成扩展所需文件&#xff09; ./configure --with-php-config/usr/local/php…

php代码加密

如何对PHP文件进行加密——ZendGuard加密与ZendLoader解密 end Guard是目前市面上最成熟的PHP源码加密产品。 经过本人搜集资料&#xff0c;亲身测试后&#xff0c;总结了如何利用Zend Guard对PHP文件进行加密&#xff0c;以及如何利用Zend Loader对加密后的PHP文件进行解密。 …

php7 加密扩展,一个PHP7 代码的加密扩展,

一个PHP7 代码的加密扩展是PHP7代码的加密扩展&#xff0c; PHP7栏目介绍如何加密扩展 推荐&#xff1a;PHP7 介绍 一个简洁高效的跨 特点 简单快速&#xff0c;实际测量后几乎不影响性能。它与其他扩展兼容&#xff0c;如OPcache和Xdebug。它支持Linux、macOS、Windows等系统。…

PHP源代码加密后正常运行

因为老板想对做出来的产品进行加密防止进行修改&#xff0c;和源代码的流逝&#xff0c;让我们看看有没有加密的方法。所以通过网上找到了相关的一些教程&#xff0c;还可以&#xff0c;记录一下 在这使用的是 php screw plus github地址 https://github.com/del-xiong/screw-p…

看我如何玩转PHP代码加密与解密

参考文献&#xff1a; https://xz.aliyun.com/t/2403 前言 两次比赛&#xff0c;两个题目&#xff0c;两种方式&#xff0c;两个程序。 一切PHP的代码终究是要到Zend Engine上走一走的&#xff0c;因此一切PHP的源码加密都是可以被解密的。&#xff08;不包括OpCode混淆-VM…

一文打尽PHP代码加密方式

原文地址 温馨提示&#xff1a;世界上没有破不了的密码&#xff0c;如果有那也只是时间问题。 我们能做的只是增加破解时间。如果这个破解时间大于一个人的寿命&#xff0c;那么这个加密方式肯定是成功的。 对于加密的程序&#xff0c;就像破解者需要了解、猜测编写者的思路…

大数据运维工程师面试

当前你们公司使用的Hadoop版本是什么 ambari2.5.1 Hadoop 2.7.3.2.6.2.14-5HDFS常见的数据压缩格式有哪些&#xff0c;介绍其中一种详细的实现方式 1 gzip压缩 优点&#xff1a;压缩率比较高&#xff0c;而且压缩/解压速度也比较快&#xff1b;hadoop本身支持&#xff0c;在…

Linux运维工程师常见基础面试题

1、tcp三次握手四次挥手详解 TCP是一种面向连接的协议&#xff0c;通信前需要建立连接&#xff0c;通信结束后需要释放连接。TCP通过三次握手建立连接&#xff0c;四次挥手释放连接。 三次握手&#xff1a; 1、客户端向服务器发送SYN包&#xff0c;表示请求建立连接。 2、服务…

运维工程师面试总结(含答案)

运维工程师面试总结 原文链接&#xff1a;https://www.cuiliangblog.cn/detail/article/2 一、linux 1. linux系统启动流程 第一步&#xff1a;开机自检&#xff0c;加载BIOS第二步&#xff1a;读取&#xff2d;&#xff22;&#xff32;第三步&#xff1a;Boot Loader grub…

Linux运维工程师面试题(1)

文章目录 Linux运维工程师面试题&#xff08;1&#xff09;1 别名、内部命令、外部命令的执行顺序2 linux 系统启动流程3 破解用户密码的方法4 忘记 grub 密码怎么解决5 硬盘空间满了怎么处理&#xff0c;怎么找到硬盘中的大文件6 硬盘明明有很多空间&#xff0c;为什么无法存储…