Quartz任务执行

使用Quartz完成定时任务 阅读详情

    quartz任务调度器,有个很忧伤的限制,就是提交的任务只能指定Job class类型,具体job的实例实例化有quartz来创建,且任务每次执行都会创建一个job实例,在某些场景下,我们可能需要传递一个job实例(比如job的属性有其他方式注入),那么直接使用quartz则不太能满足,我们需要借助dataMap来传递自己的实例.例如:

 

CronScheduleBuilder sb = CronScheduleBuilder.cronSchedule(cronExpression);
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(key, GROUP).withSchedule(sb).build();
//如果任务已经在执行,则返回
if(scheduler.checkExists(trigger.getKey())){
	return true;
}
Class<MyJob> jobClass = MyJob.class;
JobDetail job = JobBuilder.newJob(jobClass).withIdentity(key, GROUP).build();
scheduler.scheduleJob(job, trigger);

    其中MyJob就是我们自己的Job类,他实现了Job接口..接下来我们使用一种变通的方式来使用quartz.:

 

 

1. JobExecutor接口: 所有的可执行任务,都需要实现这个接口 .

 

public interface JobExecutor {

    public void execute();
}

 

 

2. JobProxy类:当任务调度时,充当代理层,间接的执行JobExecutor实例方法.

 

public class JobProxy implements Job {

private static Logger log = Logger.getLogger(JobProxy.class);

	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		
		JobExecutor executor = (JobExecutor)context.getJobDetail().getJobDataMap().get(Utils.WORKER_CALLER);
		if(executor == null){
			return;
		}
		
		try{
			executor.execute();//调用自定义的JobExecutor实例,此实例通过dataMap传递
		}catch(Exception e){
			e.printStackTrace();
		}

	}
}

 

 

3. JobScheduler类:任务的调度与取消

 

public class JobScheduler {

    private Scheduler scheduler;

    private static final String GROUP = "_default-group_";
    public JobScheduler() throws Exception{
        scheduler = StdSchedulerFactory.getDefaultScheduler();
        scheduler.start();
    }

    public boolean schedule(String key,String cronExpression,JobExecutor executor){
        try {
            CronScheduleBuilder sb = CronScheduleBuilder.cronSchedule(cronExpression);
            Trigger trigger = TriggerBuilder.newTrigger().withIdentity(key, GROUP).withSchedule(sb).build();
            //如果任务已经在执行,则返回
            if(scheduler.checkExists(trigger.getKey())){
                return true;
            }
            Class<JobProxy> jobClass = JobProxy.class;
            JobDetail job = JobBuilder.newJob(jobClass).withIdentity(key, GROUP).build();
            job.getJobDataMap().put(Utils.WORKER_ID, key); //for get
            job.getJobDataMap().put(Utils.WORKER_CALLER, executor);   //for get
            scheduler.scheduleJob(job, trigger);
            // 任务调度列表
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }


    public boolean unschedule(String key){
        try {
            TriggerKey tk = new TriggerKey(key, GROUP);
            if (scheduler.checkExists(tk)) {
                scheduler.unscheduleJob(tk);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}

    并没有特别神秘的地方,只是借助了dataMap来保存JobDeTetail的实例. 

 

Quartz调度、终止执行的任务 使用Quartz调度任务,根据需要人为的终止某个任务,适用于很多常见的场景 立即下载

相关推荐

java定时执行多任务和quartz定时执行多任务

java定时执行多任务和quartz定时执行多任务

快速使用quartz 定时任务

所以我们应该再编写一些Task,让Task作为我们真正去执行的定时任务的代码。上面的代码中有一个继承了QuartzJobBean的ScheduleJob和实体类的ScheduleJob,只是名字一样而已,不要搞混了。从上面的代码中我们已经实现了将数据库中得到Job信息,并通过ScheduleJob这个继承了QuartzJobBean类来进行定时任务。前端给我们传来了要执行的定时任务的id,我们再根据id查询定时任务的具体信息。现在我们在系统初始化的时候就把Task的信息放到schedule中。

cz2423415723的博客 5297

quartz 动态执行定时任务

quartz 动态定时任务 根据数据库数据配置动态定时任务

学习使用Java Quartz任务调度(一)

快速学习了解使用Java Quartz

一枚JAVA萌新的进阶之旅 1617

伺服电机三环控制实战:从参数整定到系统优化

本文以实战视角,深入解析伺服电机三环控制(位置环、速度环、电流环)的参数整定与系统优化全流程。文章摒弃复杂理论,通过生动的比喻和分步调试指南,详细阐述了从电流环快速响应、速度环平滑调节到位置环精准定位的调试方法,并提供了常见问题排查与进阶优化技巧,帮助工程师有效提升伺服系统性能与稳定性。

weixin_29201933的博客 244

深度学习驱动材料科学:晶体生成与性质预测技术综述

深度学习作为人工智能的核心技术,通过模拟人脑神经网络处理复杂数据,在多个领域展现出强大的模式识别与生成能力。其原理在于构建多层非线性变换,从海量数据中自动学习特征表示与映射关系。这一技术价值在于能够高效处理高维、非结构化数据,解决传统方法计算成本高、探索空间有限的问题。在工程实践中,深度学习已广泛应用于计算机视觉、自然语言处理等领域,并正深刻变革材料科学的研究范式。具体到材料领域,它通过学习已知材料的构效关系,实现对新材料性能的快速预测与逆向设计。应用场景包括但不限于新能源材料、半导体、催化剂等领域的高通量

weixin_28695161的博客 414

spring quartz 部分定时任务不执行问题定位修复方案

Quartz部分定时任务不执行问题分析过程及修复方案 背景: 2021年1月7号上线迁移需求之后,出现最为明显的 众帮文件上传 其他部分定时任务也不执行的情况 执行时间并没有按照约定时间去执行 分析1 怀疑是代码问题? 对众帮文件上传定时任务代码进行排查 并无发现编码问题,并且对1月7号上的版本 和上一个版本进行代码比对 并未发现对众邦的代码有所改动的地方 分析2 OPS定时任务框架 spring quartz 内部任务存储 调度问题? Quartz 是基于RAMJobStore调度中心去调度的,

qq_28691587的博客 3万+

用74LS190和555定时器复刻经典交通灯:一个电子工程新手的实战避坑记录

本文记录了使用74LS190和555定时器复刻经典交通灯的实战过程,详细介绍了元件选型、电路搭建与调试的关键步骤。特别分享了555定时器参数设置、74LS190级联技巧以及状态机设计的避坑经验,为电子工程新手提供实用参考。

weixin_42629671的博客 306

Quartz 基本使用,任务调度quartz详解,动态定时任务,job,Trigger,Scheduler

如一个OA系统需要在每周五9点自动生成数据报表,或者想每月10号自动还款,又或者每周给暗恋的女生定时发送邮件等等。Quartz是什么?Quartz是一个强大任务调度。

鹏神丶明月天 5318

matlab球面投影(二)

matlab球面投影,想做一个全景相机,不知道,要做成啥样,于是在MATLAB先仿真一下,看下是个啥样子 百度别人做的,复制下面的代码到MATLAB的命令串口下,,网上找了张全景图,可以是bmp,jpg,改程序就可以了 回车运行就可以看到结果。 复制下面代码时,下面的中文注释记得删除,MATLAB是会报错的, close all; clear all; clc [x,y,z]=sphere(50); A=imread('a.JPG'); //名字是自己命名的,记得改 B=warp(x,y,-z,

rjszcb的博客 3161

告别Keil手动分区!用CubeMX+VS Code一键生成带Bootloader的STM32 OTA工程

本文详细介绍了如何利用STM32CubeMX和VS Code实现STM32 OTA工程的自动化构建,告别传统Keil手动分区的繁琐流程。通过图形化配置Flash分区、自动生成链接脚本以及实现Bootloader跳转逻辑,开发者可以高效完成远程升级功能开发,显著提升嵌入式开发效率。

weixin_33720956的博客 389

quartz任务执行

quartz是怎么执行定时任务的? quartz的核心线程为QuartzSchedulerThread; QuartzScheduler为Job的容器,一个Job由Job实现类和Trigger组成。 QuartzSchedulerThread负责执行Trigger已经被firing的任务。 QuartzSchedulerThread线程在什么时候启动? 在QuartzSchedu

何雄的程序世界 1157

从BSCAN到BAP:深度解析Tessent MBIST逻辑的协同工作机制与设计考量

本文深入解析了Tessent MBIST逻辑中BSCAN Interface、Logic Group Def、Controller与BAP模块的协同工作机制。文章以一条测试指令的完整路径为例,详细阐述了数据流与控制流如何跨模块、跨时钟域协同工作,并重点探讨了MBIST BAP在协议转换与流量管理中的核心桥梁作用,为芯片内建自测试的集成与调试提供了关键的设计考量和实战技巧。

kappa的博客 482

quartz框架:任务执行间隔

Quartz建议总是放一个自己的quartz.properties文件在classpath下,运行时可覆盖quartz.jar中的quartz.properties的配置,因为根据自己实际的应用,需要对quartz配置作些调整。 一般默认设置为: org.quartz.scheduler.instanceName = DefaultQuartzScheduler org.quartz....

berry2006的博客 752

来自工业界的知识库 RAG 服务(二),RagFlow 源码全流程深度解析

前面介绍过有道 QAnything 源码解析,通过深入了解工业界的知识库 RAG 服务,得到了不少调优 RAG 服务的新想法。因此本次趁热打铁,额外花费一点时间,深入研究了另一个火热的开源 RAG 服务RagFlow的完整实现流程,希望同样有所收获。首先依旧可以先从框架图入手,与常规的 RAG 架构进行一些比较可以看到右侧知识库被明显放大,同时最右侧详细介绍了文件解析的各种手段,比如OCR等,这些在常规的 RAG 中可能会作为一个不起眼的。

易迟的专栏 2万+

从零构建工业级SPI-CAN网关:CH347与CH9431的软硬件协同设计实战

本文详细介绍了基于CH347和CH9431芯片构建工业级SPI-CAN网关的完整方案。通过硬件架构设计、Linux驱动定制、并发处理优化和EMC抗干扰测试,实现高可靠性通信网关,适用于工业自动化和汽车电子等严苛环境。

spark7igniter的博客 632

C# Quartz任务执行频率问题

Quartz配置任务执行时候,往往chan

lyh1112的专栏 1635

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

quartz原理分析4----任务执行

任务执行是通过QuartzSchedulerThread类来实现的,此类继承了Thread,可以作为一个线程单独运行。QuartzScheduler有个此类的属性,在QuartzScheduler初始化的时候会创建线程并执行。 QuartzSchedulerThread有个状态属性,在初始执行的时候状态pause=true,只有在初始化完成之后(QuartzScheduler.start())才...

caohuilei的专栏 864

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

<p>假设,我们有个job,每2分钟执行一次,但是job本身就要执行5分钟,这个时候,quartz默认设置是并发的,所以它又会开一个线程来执行。这样往往会导致我们执行的数据不正确。 <br> 解决办法: 1、要是是和spring框架结合的,可以添加如下配置: <propert...

延宝小白马的博客 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

springBoot下使用quartz定时任务;动态修改任务执行时间

springBoot下使用quartz定时任务;动态修改任务执行时间

奔跑的菜鸡 3476

Quartz Scheduler日志监控:任务执行状态追踪与故障排查指南

还在为定时任务执行状态不透明而烦恼?本文将手把手教你配置Quartz Scheduler的日志系统,实现任务执行全链路监控,轻松定位问题根源。 通过本文你将学会: - 快速配置Quartz日志框架 - 监控任务执行关键节点 - 解析常见日志信息含义 - 高效排查任务执行故障 ## 日志框架配置基础 Quartz默认使用SLF4J作为日志门面,支持Log4j、Logback等多种实现。在[gr

gitblog_00202的博客 528

Quartz之任务执行时间查看

该类org.quartz.impl.triggers.CronTriggerImpl的getTimeAfter可查看下次执行时间

努力就有希望 3742

用quartz实现自动任务执行

用quartz实现自动任务执行需求:系统里有一任务,需要定时执行 有一开源项目可以解决此类问题,拿来1.       下载   到google里搜索 quartz down之2.       加开发包quartz.jar到你的环境,至于怎么配置不多讲,自己动手。3.       在web.xml里加入    servlet>       servlet-name

Wing.Zhang专栏 3358

这样使用Quartz,就不怕任务执行失败了!

文章目录项目结构效果入门参考源码 Quartz版本:2.3.0 目前稳定版 SpringBoot版本:2.0.4.RELEASE 项目结构 结构很简单就不多说了,有一点需要注意,因为此项目使用的是Druid连接池,需要额外的一些配置,具体看:Quartz学习笔记(五) quartz扩展druid连接池 建议直接把最下面的源码克隆下来运行,源码里面注释很清晰,然后结合下面的几篇文章看,就可以很快理...

小半的博客 1493
上一篇: Zookeeper开发小结
下一篇: SpringMVC项目搭建过程备忘
shift_alt_ctrl
博客等级 码龄10年 0粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值