spring quartz 实现全局任务

Spring Quartz 实现多任务定时调用 Spring Quartz 实现多任务定时调用。简单说起来,就是让 Quartz 在指定的时间去帮助我们做指定的业务,达到任务调度与任务定时的目的。 阅读详情

spring quartz 实现全局任务  

  |字号 订阅


最近公司要在项目里加入 定时任务服务模块 
采用spring quartz 

首先一部分任务需要初始化加入  一部分任务需要动态就如 首先配置applicationContext.xml
<初始化任务类>
<bean id="MyTask" class="com.wooboo.service.SpringQuartz.MyTask"></bean>
  <!-- 定义调用对象和调用对象的方法 -->
   <bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 调用的类 -->
<property name="targetObject">
<ref bean="MyTask" />
</property>
<!-- 调用类中的方法 -->
<property name="targetMethod">
<value>Global</value>
</property>
</bean>



    <!-- 触发器 -->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
        <property name="jobDetail" ref="jobtask" />
     <!--间隔多久执行一次 -->
        <property name="repeatInterval" value="86400000" />
     <!--延迟 -->
        <property name="startDelay" value="3000" />

    </bean>
<!--dubbo RPC-->>
<dubbo:reference id="promotionService" interface="com.wooboo.service.promotion.service.PromotionService" timeout="5000"/>
 <!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
        <bean id="scheduler" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <property name="triggers">
                <list>
                    <ref bean="simpleTrigger"/>
                </list>
            </property>
        </bean>


首先来看一下初始化任务类 MyTask

package com.wooboo.service.SpringQuartz;

import java.util.Iterator;

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Scheduler;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean;


public class  InitTask  { 
static ClassPathXmlApplicationContext context=null;

     //调度器的注入
 @Autowired
 Scheduler scheduler;
//接口类名称 这里我们实现用spring管理bean (由于项目实现对RPC的调用 所以采用dubbo 接口注入)
static String [] interfacename=new String[]{"promotionService"};
       //接口类方法
static String [] methodname=new String[]{"initSeckillData"};
       //时间表达式
static String [] CronExpression=new String[]{"0 0 24 * * ?"}; 
//将任务加入到jobMap(jobmap 类 具体看下面 接触此容器 可以实现页面控制任务的开关)
 static {
 for(int i=0;i<interfacename.length;i++){
 ScheduleJob job = new ScheduleJob();
job.setJobId(interfacename[i]+"-"+methodname[i]);
job.setJobName(interfacename[i]+"-"+methodname[i]);
job.setJobGroup(StaticUtil.jobprefix);
job.setJobStatus("1");
job.setCronExpression(CronExpression[i]);
job.setDesc("shop定时任务");
try {
addJob(job);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 }
 }
/**
 * 添加任务
 * @param scheduleJob
 */
public static void addJob(ScheduleJob scheduleJob)throws Exception {
StaticUtil.jobMap.put(scheduleJob.getJobGroup() + "-" + scheduleJob.getJobName(), scheduleJob);
}
public void  Global( ) throws Exception {
               if(StaticUtil.jobMap.size()>0){
for(String key : StaticUtil.jobMap.keySet()){
ScheduleJob job=StaticUtil.jobMap.get(key);
 
TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobName(), job.getJobGroup());
 
//获取trigger,即在spring配置文件中定义的 bean id="myTrigger"
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
System.err.println(triggerKey);
 
 String[] keys=key.split("-");
//不存在,创建一个
if (null == trigger) {
Object object =  context.getBean(keys[1]);
                              //具体job
MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean();
             jobDetail.setTargetObject(object);
             jobDetail.setTargetMethod(keys[2]);
             jobDetail.setName(keys[1]+"-"+keys[2]);
             jobDetail.setConcurrent(false);
             jobDetail.setGroup(StaticUtil.jobprefix);
             jobDetail.afterPropertiesSet();
             
//表达式调度构建器
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
 
//按新的cronExpression表达式构建一个新的trigger
trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobName(), job.getJobGroup()).withSchedule(scheduleBuilder).build();
scheduler.scheduleJob(jobDetail.getObject(),trigger);
ShopQuartzimpl.updateQuartzState(keys[1], keys[2], "1");
} else {
// Trigger已存在,那么更新相应的定时设置
//表达式调度构建器
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression());
 
//按新的cronExpression表达式重新构建trigger
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
//按新的trigger重新设置job执行
scheduler.rescheduleJob(triggerKey, trigger);
ShopQuartzimpl.updateQuartzState(keys[1], keys[2], "1");
}
}
       }
    }  
       //方法测试
public static void main(String[] args) {
context= new ClassPathXmlApplicationContext( new String[] { "META-INF/spring/applicationContext.xml" });
context.start();
}



package com.wooboo.service.SpringQuartz;

public class ScheduleJob {
/** 任务id */
    private String jobId;
 
    /** 任务名称 */
    private String jobName;
 
    /** 任务分组 */
    private String jobGroup;
 
    /** 任务状态  1启用  2暂停  3删除*/
    private String jobStatus;
 
    /** 任务运行时间表达式 */
    private String cronExpression;
 
    /** 任务描述 */
    private String desc;

public String getJobId() {
return jobId;
}

public void setJobId(String jobId) {
this.jobId = jobId;
}

public String getJobName() {
return jobName;
}

public void setJobName(String jobName) {
this.jobName = jobName;
}

public String getJobGroup() {
return jobGroup;
}

public void setJobGroup(String jobGroup) {
this.jobGroup = jobGroup;
}

public String getJobStatus() {
return jobStatus;
}

public void setJobStatus(String jobStatus) {
this.jobStatus = jobStatus;
}

public String getCronExpression() {
return cronExpression;
}

public void setCronExpression(String cronExpression) {
this.cronExpression = cronExpression;
}

public String getDesc() {
return desc;
}

public void setDesc(String desc) {
this.desc = desc;
}
}
Spring+Quartz实现定时任务 引 Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度。 Jar包依赖 org.quartz-scheduler quartz 2.2.1 需要注意一点,与Spring3.1以下版本整合必须使用Quartz 1.x. 阅读详情

相关推荐

Spring整合Quartz实现企业级定时任务调度

定时任务调度是分布式系统中的关键技术,通过预定义的时间规则自动触发业务逻辑执行。其核心原理基于调度引擎的时间轮算法,能够精准控制任务执行时机。在Java生态中,Spring框架与Quartz的整合提供了企业级解决方案,既支持简单的注解配置(@Scheduled),也能满足动态调度、集群部署等复杂需求。这种技术组合特别适合电商促销定时上线、财务周期报表生成等业务场景,通过JobDetail和Trigger的灵活配置,开发者可以快速实现包括秒级精度、失败重试在内的各种调度策略。结合Spring Boot的自动化

benben 397

quartz定时任务中如何给MyJob传参

quartz定时任务中如何给MyJob传参 在调度服务中使用语句传参 在myjob中接收参数 在调度服务类中,定义一个私有变量,并添加setter方法用于赋值。这里的私有变量就是需要向myjob传递的参数。 example: 在主类中定义变量: 创建完jobDetail之后,使用语句传值 在job中接收变量 使用: 这样就可以在job里面使用传递过来的参数值了。 这里贴出调试时候的...

清澈明朗 积极向上 2292

Quartz+spring任务调度

一、到官网下载quartz相应的压缩包,maven引用如下:                &lt;!-- 添加quartz定时任务包 --&gt; &lt;dependency&gt; &lt;groupId&gt;org.quartz-scheduler&lt;/groupId&gt; &lt;artifactId&gt;quartz&lt;/artifactId&gt; ...

不积跬步 无以至千里 1422

SpringBoot+Dubbo+Quartz (三) - 整合 Quartz

一、准备工作 1.maven的 pom.xml中添加依赖 <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org

zxjdC的博客 814

任务调度开源框架Quartz动态添加、修改和删除定时任务

Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz框架包含了调度器监听、作业和触发器监听。你可以配置作业和触发器监听为全局监听或者是特定于作业和触发器的监听。Quartz 允许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。并且还能和Spring配置整合使用。Quartz在功能上远远超越了JDK自带的Timer,很好很强大!

Spring整合Quartz实现定时任务调度的方法

下面小编就为大家带来一篇Spring整合Quartz实现定时任务调度的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Quartz的使用及相关知识点

1,什么是Quartz? 概念:它是一个作业调度框架,不经事开源的而且完全是Java语言开发的,虽然灵活但是不简单,不仅能单独使用而且还还可以和Spring项目配合使用; 2,Spring项目整合Quartz 1,首先创建一个Maven项目并导入相关坐标,因为是与Spring项目进行整合所以我们需要导入Spring相关坐标;(需要注意的是我们创建的项目打包形式必须是war形式这样才能独立运行...

kay'blog 305

VirtualBox创建虚拟机(为安装Ubuntu桌面系统)

Ubuntu的安装非常灵活。但是万变不离其宗,归纳起来,无非就是以下3种:(1)用户可以下载完整的ISO镜像文件,将其转移到各种介质上面,例如DVD或者U盘,然后以该介质引导系统进行安装。(2)用户可以下载一个非常小的网络安装器,利用该安装器引导系统进行在线安装。(3)用户可以将Ubuntu安装到一个U盘中,随身携带。为了便于读者学习,本节将介绍通过完整的ISO镜像文件安装Ubuntu。其他的安装方式将在后面介绍。

夏天又到了的专栏 2689

Quartz任务调度框架之最全Quartz系统参数配置详解

quartz配置参数详解

tms192407的博客 6539

人工智能入门系列之一: 鸢尾花(Iris)多分类的神经网络详解及代码实现

这是最好的时代,我们一起来打造属于自动驾驶汽车上路、无人机飞天、智能机器人管工厂的AI未来 人工智能领域分化为两个阵营:其一是规则式(rule-based)方法,在人工智能早期占主峰;其二是神经网络(neural network)方法,后起之秀。随着硬件水平的提高,算力的指数式增长;人工智能的重心已经从规则式的专家时代转移到神经网络的数据时代。 “神经网络”不选择把人脑熟稔的逻辑规则传授给计算机...

NLP家的码奴小荷的博客 2万+

转子动力学 | 临界速度与稳定性分析

本文深入探讨了转子动力学中的核心问题——临界速度与稳定性分析。临界速度是旋转机械发生共振的危险转速,通过模态分析和坎贝尔图可进行预测。文章还剖析了油膜涡动等稳定性问题,并结合ANSYS仿真案例,详细阐述了从建模、分析到设计优化的完整工程实践流程,为旋转机械的可靠设计与安全运行提供关键指导。

weixin_29313239的博客 518

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

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

鹏神丶明月天 5319

雷达气象学(8)——反射率因子图实战(强对流预警篇)

本文聚焦雷达反射率因子图在强对流预警中的实战应用,深入解析了柱状回波、有界弱回波区(BWER)、三体散射(TBSS)等关键回波结构特征,这些是识别超级单体风暴和大冰雹的核心“身份证”。文章强调从静态识别转向动态追踪与多源数据综合研判的思维转变,并提供了系统的实战分析流程与常见误区避坑指南,旨在提升对强对流天气的短临预警能力。

weixin_29213827的博客 486

springmvc+quartz定时任务

spring-mvc.xml配置文件 Spring-mvc.xml: Xmlns:task=”http://www.springframework.org/schema/task” Xsi:schemalocation=”http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spr...

weixin_43355440的博客 751

解决VM 与 Device/Credential Guard 不兼容。在禁用 Device/Credential Guard 后,可以运行 VM 的方法

在启用了Credential Guard或Device Guard的Windows 10主机上启动12.5版之前的VMware Workstation中的虚拟机时,将显示蓝色诊断屏幕(BSOD)。 会看到类似于以下内容的错误: VMware Workstation和Device / Credential Guard不兼容。禁用Device / Credential Guard后,可以运行VMwar...

Hern(宋兆恒) 39万+

自动化Google Chrome的强大工具:chromedriver下载、安装、简单使用

本文介绍了 ChromeDriver 的基本概念和安装配置方法,重点讲解了如何通过 Selenium 实现 Chrome 浏览器的自动化测试。内容涵盖了 ChromeDriver 下载、版本匹配、依赖引入和简单的自动化测试脚本示例,帮助读者快速上手并避免常见问题。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 88万+

Quartz+Spring 实现任务监控

Quartz是一个优秀的任务调度框架,完全基于Java实现,功能强大,易于集成,最近在写了一个小项目,算是对之前接触到的技术做一个总结吧,在这个项目中使用Quartz实现对任务的监控

想成为工程师的码农 1万+

【AgentScope 2.0】01-不搭 demo,直接解剖一个生产级 Agent 平台:loser-agent 全链路地图

本文介绍生产级Agent平台loser-agent的完整请求旅程,从用户发消息到返回结果共七站:入口鉴权、灰度路由、Agent装配、模型路由、工具执行、持久化与流式响应。课程以真实源码为线索,深入剖析每一步实现逻辑,涵盖灰度发布、权限控制、HITL审批、多模态处理、状态持久化等核心能力。强调框架仅负责Agent运行时语义,平台自建管理请求生命周期中所有非框架部分,适合Java后端开发者系统掌握Agent工程化落地。

loser.with.m的博客 725

Spring Quartz 定时器任务

Spring Quartz 定时器任务本文介绍了Spring Quartz使用定时器任务的2种方式 基于XML文件的方式 基于注解的方式 Spring Quartz部分有如下一些核心概念: Scheduler是一个计划调度器容器,容器里面可以很多的JobDetail和Trigger,当容器启动后,里面的每个JobDetail都会根据Trigger按部就班自动去执行。容器中有一个线程池,用来并行调度执

一黑到底 5441

Qt界面美化-飞扬青云自绘控件插件的使用-避免采坑

1、先上一个集成到QtCreater中的效果图: 2、飞扬青云自绘控件插件下载地址:https://gitcode.net/mirrors/feiyangqingyun/qucsdk?utm_source=csdn_github_accelerator 3、集成插件到QtCreater中的方法: (1)、查看自己使用的QtCreater的版本信息,我的:Qt 5.15.2 MSVC2019 64位 (2)插件下载下来后工程预览: 我选择msvc版本的SDK,打开找到匹配的SDK:...

小米的修行之路 2793

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Echo定时任务实现:Spring Quartz分布式定时任务详解

在现代Web应用开发中,定时任务是不可或缺的功能模块,用于处理数据统计、缓存更新、邮件发送等周期性任务。Echo论坛项目基于SpringBoot+Quartz实现了高效稳定的分布式定时任务管理,本文将详细介绍其实现原理与最佳实践。 ## 核心组件:Quartz在Echo项目中的应用架构 Echo项目采用Spring Quartz作为定时任务框架,通过数据库持久化任务信息,确保分布式环境下任务的

gitblog_01015的博客 983

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

定时任务之Quartz

Quartz 的设计核心在于将“做什么(Job)”与“何时做(Trigger)”解耦,并通过“调度器(Scheduler)”进行管理。注意:使用数据库模式前,需确保数据库中已存在 Quartz 所需的 11 张表(如。如果不配置任何 Quartz 属性,Spring Boot 默认使用内存存储。在实际生产中,往往需要通过接口动态添加、修改或删除任务。starter,极大地简化了配置过程。场景 A:内存模式(默认,无需额外配置)Spring Boot 提供了。场景 B:数据库持久化与集群模式。

Listen·Rain的博客 1566

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Spring 和 Quartz 实现定时任务

Java 定时的四种方式 Quartz 对于继承QuartzJobBean需要做 需要实现定时任务的类继承orgspringframeworkschedulingquartzQuartzJobBean实现定时执行的方法xml里要么声明这个定时任务类要么使用注解扫描的方式声明 xml里声明新的beanclass为orgspringframeworkschedulingquartzJobDetailBe

lqadam的博客 3620

Spring整合Quartz 实现定时job任务

接触定时轮循任务也有半年了,也不太常用,就记录下来做个备注,今天重新搭建的环境,一步步从头来,又发现几点新东西。实现定时轮循的 方式有两种,一种是用:MethodInvokingJobDetailFactoryBean,两一种是用:JobDetailBean.这里就对着两种的使用情况进行具体应用。最后给上二者的区别点。 环境:maven3.0+spring4.0.+quartz1.8.5+jd

万米高空的博客 4355

Spring整合Quartz框架定时任务

最近项目中经常用到队列和定时任务及线程的整合应用,涉及的场景是当多人访问系统时需要回调客户系统处理结果时,如何减少服务器压力并能处理业务需求,这里用到了队列减少服务器压力加入定时任务发送机制,使用的是Spring框架整合 Quartz框架实现的定时任务,因此学习了一下Quartz的前因后果 在此记录学习一下。 一、引入       你曾经需要应用执行一个任务吗?这个任务每天或每周星期二晚上11

tanyunlong_nice的专栏 1万+

Spring实现后台的任务调度TimerTask和Quartz

最近整后台,涉及到两个后台调度的问题。 一是以时间间隔为条件的轮询调度; 运用场景:每隔5分钟抓取数据; 二是一某个时间点为条件的轮询调度; 运用场景:后台日志货报表生成上传,每个周一生成上一周的,每个月初生成上一月。 其实按周来执行调度,用前面一个场景也可以实现,但是按月生成,因为每月时间不固定,必须动态判断和执行。 后台实现调度的思路,我一开始考虑的是,web启

killnono 5809
上一篇: mongodb mms安装
下一篇: BeanComparator实现ArrayList中的元素按多个属性复合排序
rtnull
博客等级 码龄16年 5粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值