Quartz存储与持久化-基于Spring的配置

Quartz的持久化数据库(九) > 勿以恶小而为之,勿以善小而不为--------------------------刘备 > 劝诸君,多行善事积福报,莫作恶 主要内容: Quartz的持久化和动态添加任务 阅读详情

   在上文【Quartz】Quartz存储与持久化-基于quartz.properties的配置 ,是通过配置quartz.properties文件的方式来实现持久化的。本文将通过spring配置的方式来实现存储与持久化。

1、同上文一样,要先创建相关的数据表,并新建一个Java工程,并导入相关的包,整个工程目录 如下:



2、创建Job类

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.mucfc;  
  2. import java.text.SimpleDateFormat;  
  3. import java.util.Date;  
  4. import org.apache.log4j.Logger;  
  5. import org.quartz.Job;  
  6. import org.quartz.JobExecutionContext;  
  7. import org.quartz.JobExecutionException;  
  8. public class MyJob implements Job{  
  9.     private static final Logger logger = Logger.getLogger(MyJob.class);    
  10.     @Override  
  11.     public void execute(JobExecutionContext context)  
  12.             throws JobExecutionException {  
  13.         System.out.println("Hello quzrtz  "+  
  14.                 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss ").format(new Date()));  
  15.           
  16.     }  
  17.   
  18. }  

3、创建一个调度类

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.mucfc;  
  2. import java.text.ParseException;  
  3. import java.util.List;  
  4.   
  5. import org.apache.commons.lang.StringUtils;  
  6. import org.quartz.CronScheduleBuilder;  
  7. import org.quartz.Job;  
  8. import org.quartz.JobBuilder;  
  9. import org.quartz.JobDetail;  
  10. import org.quartz.JobKey;  
  11. import org.quartz.Scheduler;  
  12. import org.quartz.SchedulerException;  
  13. import org.quartz.SchedulerFactory;  
  14. import org.quartz.SimpleScheduleBuilder;  
  15. import org.quartz.SimpleTrigger;  
  16. import org.quartz.Trigger;  
  17. import org.quartz.TriggerBuilder;  
  18. import org.quartz.TriggerKey;  
  19. import org.quartz.impl.StdSchedulerFactory;  
  20. import org.springframework.beans.factory.annotation.Autowired;  
  21. import org.springframework.context.ApplicationContext;  
  22. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  23. import org.springframework.stereotype.Component;  
  24. @Component  
  25. public class QuartzTest {  
  26.     @Autowired  
  27.     private Scheduler scheduler;  
  28.     private static String JOB_GROUP_NAME = "ddlib";  
  29.     private static String TRIGGER_GROUP_NAME = "ddlibTrigger";  
  30.     /** 
  31.      * 开始一个simpleSchedule()调度 
  32.      */  
  33.     public void startSchedule() {  
  34.         try {  
  35.             // 1、创建一个JobDetail实例,指定Quartz  
  36.             JobDetail jobDetail = JobBuilder.newJob(MyJob.class)  
  37.             // 任务执行类  
  38.                     .withIdentity("job1_1", "jGroup1")  
  39.                     // 任务名,任务组  
  40.                     .build();  
  41.             // 2、创建Trigger  
  42.             SimpleScheduleBuilder builder = SimpleScheduleBuilder  
  43.                     .simpleSchedule()  
  44.                     // 设置执行次数  
  45.                     .repeatSecondlyForTotalCount(10);  
  46.             Trigger trigger = TriggerBuilder.newTrigger()  
  47.                     .withIdentity("trigger1_1", "tGroup1").startNow()  
  48.                     .withSchedule(builder).build();  
  49.             // 3、创建Scheduler  
  50.             scheduler.start();  
  51.             // 4、调度执行  
  52.             scheduler.scheduleJob(jobDetail, trigger);  
  53.             try {  
  54.                 Thread.sleep(60000);  
  55.             } catch (InterruptedException e) {  
  56.                 e.printStackTrace();  
  57.             }  
  58.   
  59.             scheduler.shutdown();  
  60.   
  61.         } catch (SchedulerException e) {  
  62.             e.printStackTrace();  
  63.         }  
  64.     }  
  65.   
  66.     /** 
  67.      * 从数据库中找到已经存在的job,并重新开户调度 
  68.      */  
  69.     public  void resumeJob() {  
  70.         try {  
  71.             // ①获取调度器中所有的触发器组  
  72.             List<String> triggerGroups = scheduler.getTriggerGroupNames();  
  73.             // ②重新恢复在tgroup1组中,名为trigger1_1触发器的运行  
  74.             for (int i = 0; i < triggerGroups.size(); i++) {  
  75.                 List<String> triggers = scheduler.getTriggerGroupNames();  
  76.                 for (int j = 0; j < triggers.size(); j++) {  
  77.                     Trigger tg = scheduler.getTrigger(new TriggerKey(triggers  
  78.                             .get(j), triggerGroups.get(i)));  
  79.                     // ②-1:根据名称判断  
  80.                     if (tg instanceof SimpleTrigger  
  81.                             && tg.getDescription().equals("tgroup1.trigger1_1")) {  
  82.                         // ②-1:恢复运行  
  83.                         scheduler.resumeJob(new JobKey(triggers.get(j),  
  84.                                 triggerGroups.get(i)));  
  85.                     }  
  86.                 }  
  87.   
  88.             }  
  89.             scheduler.start();  
  90.         } catch (Exception e) {  
  91.             e.printStackTrace();  
  92.   
  93.         }  
  94.     }  
  95. }  

4、beans.xml文件配置

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:p="http://www.springframework.org/schema/p" xmlns:task="http://www.springframework.org/schema/task"  
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  6.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  7.     http://www.springframework.org/schema/context     
  8.     http://www.springframework.org/schema/context/spring-context-3.0.xsd   
  9.     http://www.springframework.org/schema/task    
  10.     http://www.springframework.org/schema/task/spring-task-3.0.xsd">  
  11.          <!-- 自动扫描注解的bean -->  
  12.     <context:component-scan base-package="com.mucfc"/>  
  13.       
  14.     <context:property-placeholder location="classpath:jdbc.properties" />  
  15.     <bean id="quartzDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >  
  16.         <!-- <property name="driverClass" value="${quartz.driverClassName}"/>  
  17.         <property name="jdbcUrl" value="${quartz.url}"/>  
  18.         <property name="user"  value="${quartz.username}"/>  
  19.         <property name="password" " value="${quartz.password}"/>  
  20.         <property name="minPoolSize"  value="${quartz.minPoolSize}"/>  
  21.         <property name="initialPoolSize" value="${quartz.initialPoolSize}"/> -->   
  22.   
  23.        <property name="driverClassName" value="${quartz.driverClassName}"/>    
  24.         <property name="url" value="${quartz.url}"/>    
  25.         <property name="username" value="${quartz.username}"/>    
  26.         <property name="password" value="${quartz.password}"/>     
  27.     </bean>  
  28.   
  29.       
  30.     <!-- quartz持久化存储  -->   
  31.     <bean name="quartzScheduler"  
  32.         class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  33.         <property name="dataSource">  
  34.             <ref bean="quartzDataSource" />  
  35.         </property>  
  36.         <property name="applicationContextSchedulerContextKey" value="applicationContext" />  
  37.         <property name="quartzProperties">  
  38.         <props>  
  39.          <prop key="org.quartz.scheduler.instanceName">CRMscheduler</prop>  
  40.             <prop key="org.quartz.scheduler.instanceId">AUTO</prop>  
  41.             <!-- 线程池配置 -->  
  42.             <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>  
  43.             <prop key="org.quartz.threadPool.threadCount">20</prop>  
  44.             <prop key="org.quartz.threadPool.threadPriority">5</prop>  
  45.             <prop key="org.quartz.jobStore.misfireThreshold">120000</prop>  
  46.             <!-- JobStore 配置 -->  
  47.             <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>  
  48.             <!-- 集群配置 -->  
  49.             <prop key="org.quartz.jobStore.isClustered">true</prop>  
  50.             <prop key="org.quartz.jobStore.clusterCheckinInterval">15000</prop>  
  51.             <prop key="org.quartz.jobStore.maxMisfiresToHandleAtATime">1</prop>                   
  52.                <!-- 数据表设置 -->  
  53.             <prop key="org.quartz.jobStore.tablePrefix">qrtz_</prop>  
  54.             <prop key="org.quartz.jobStore.dataSource">qzDS</prop>  
  55.         </props>         
  56.         </property>  
  57.     </bean>    
  58. </beans>  
其中数据源jdbc.properties:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ############quartz db########################    
  2. quartz.driverClassName=com.mysql.jdbc.Driver    
  3. quartz.url=jdbc:mysql://127.0.0.1:3306/quartz?useUnicode=true    
  4. quartz.username=root  
  5. quartz.password=christmas258@  
  6. quartz.minPoolSize=7    
  7. quartz.initialPoolSize=12  

5、测试类

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.mucfc;  
  2. import org.springframework.context.ApplicationContext;  
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  4. public class Test {  
  5.     public static void main(String[] args) {  
  6.         ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");  
  7.      QuartzTest quartzTest=context.getBean("quartzTest",QuartzTest.class);  
  8.              quartzTest.startSchedule();  
  9.              //quartzTest.resumeJob();  
  10.   
  11.     }  
  12.   
  13. }  

输出结果:


查看数据表

停止程序,语句改成:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //quartzTest.startSchedule();  
  2. uartzTest.resumeJob();  
然后就可以发现任务接着运行了,运行完成完之后自动从数据表中删除:



项下载地址

spring cloud系列-06.spring cloud(spring boot)持久化quartz,实现动态定时任务 一,quartz简介 Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.3.0。 详细参考百度百科:https://b... 阅读详情

相关推荐

Spring Boot进阶(69):轻松实现定时任务持久化!SpringBoot集成quartz带你玩转定时任务删除、暂停、获取等操作!【附项目源码】

本篇文章主要介绍了如何使用SpringBoot整合Quartz,并将定时任务写入库中。首先,我们会给出整个项目的架构,然后详细介绍如何配置Quartz,并将定时任务写入库中。最后,我们还会提供一个测试用例,用于验证我们的定时任务是否成功运行

**My Coding Family** 3840

【Quartz】(一)定时框架Quartz的持久化配置

1. 使用背景 当前,越来越多的场景下面需要使用到定时任务,比如报表的生成,每月或者每年进行一次某些数据的统计等等,使用Springboot中的@Scheduled注解固然也可以实现,只不过,如果要改定时的时间,控制定时的开关,都需要直接操作项目的代码,如果是线上环境的,还得需要把项目 停下来,代价太大,那到底有没有一种框架可以实现我们对于定时任务的增删查改,可以修改定时的时间,启动以及暂定定时任务呢,答案是有的,目前定时任务的框架有很多,比如我们今天要说的Quartz,分布式定时任务xxl-job等等。

JeffHan^_^的博客 4170

多模态数据集对比:MicroLens、PixelRec和Amazon在电商推荐中的表现差异

本文深入对比了三大主流多模态数据集MicroLens、PixelRec和Amazon在电商推荐中的表现差异。通过实际测试数据,分析了这些数据集在冷启动处理、模态融合、稀疏性挑战等关键场景下的真实表现,为算法工程师和研究员提供实用指南。特别关注多模态数据集的选择对推荐系统效果的影响,帮助开发者优化模型性能。

weixin_28717939的博客 420

Quartz定时框架的持久化

小强的上一篇quartz文章简单的说了一下quartz的怎样使用,一般在实际工作中那个根本是不够的,所以今天在这记录下Quartz定时框架的持久化, 一、quartz的存储于持久化介绍 Quartz框架有两种任务存储方式。一种是RAMJobStore存储方式,也是默认的存储方式。RAMJobStore将quartz定时的任务信息存储在服务器的内存中,这种方式的优点是可以提供最好的性能,因为任...

Mr.小强的博客 7660

分析攻击流量样本

利用wireshark分析.pcap攻击样本的攻击流程,利用漏洞等。

一段旅途 6845

从X86到ARM:将VINS-Fusion-GPU和ego-planner迁移到Jetson Orin-NX时,我踩过的那些‘环境差异’坑

本文详细介绍了将VINS-Fusion-GPU和ego-planner从X86平台迁移到Jetson Orin-NX(ARM架构)时遇到的环境差异问题及解决方案。内容涵盖ARM与X86的架构差异、依赖管理、性能调优和硬件接口适配,特别强调了CUDA在ARM平台上的优化配置和内存访问技巧,帮助开发者高效完成跨平台迁移。

weixin_42647395的博客 122

【Quartz】Quartz存储与持久化-基于quartz.properties的配置

  林炳文Evankaka原创作品。转载请注明出处http://blog.youkuaiyun.com/evankaka 一、   Quartz存储与持久化          Quartz提供两种基本作业存储类型。第一种类型叫做RAMJobStore,第二种类型叫做JDBC作业存储。在默认情况下Quartz将任务调度的运行信息保存在内存中,这种方法提供了最佳的性能,因为内存中数据访问最快。不足之处是缺乏...

Evankaka的专栏 3万+

Cocos Creator 3.x 实战:用脚本动态加载Spine动画,告别resources硬编码

本文详细介绍了Cocos Creator 3.x中Spine动画的动态加载与挂点系统实战技巧。通过Asset Bundle替代传统resources硬编码方式,实现资源的高效管理和热更新支持,同时结合TypeScript强类型和单例模式优化加载流程。文章还深入探讨了跨平台适配、挂点编程方案及性能优化策略,帮助开发者提升游戏开发效率与灵活性。

weixin_42526353的博客 268

springBoot Quartz 定时任务

quartz (从原理到应用)详解篇参考: https://my.oschina.net/songhongxu/blog/802574 springBoot和Quartz 结合的参考: https://blog.youkuaiyun.com/u012373815/article/details/86740625 此例子启动时异常: 06:23:09.697 [main] INFO org.quar...

zhengyunling的专栏 1787

相机标定(六)—— 张正友标定法

相机标定一、相机标定的目的1. 相机的成像过程2. 相机标定的目的3. 畸变与畸变矫正二、张正友标定法简介三、标定相机内外参1. 求解内参和外参的积2. 求解内参矩阵3. 求解外参矩阵四、标定相机的畸变参数五、L-M算法参数优化六、相机标定的步骤七、源代码 一、相机标定的目的 1. 相机的成像过程 2. 相机标定的目的 3. 畸变与畸变矫正 二、张正友标定法简介 三、标定相机内外参 1. 求解内参和外参的积 2. 求解内参矩阵 3. 求解外参矩阵 四、标定相机的畸变参数 五、L-M算法参数优化 六、相机

weixin_41480034的博客 1万+

基于深度学习的树木种类识别

本文介绍了基于深度学习的树木种类识别技术。我们将通过深度学习模型和图像处理技术实现对树木的自动识别与分类。首先,我们将介绍深度学习的基本原理和相关算法。接着,我们将详细说明树木种类识别的数据准备、模型构建和训练过程。最后,我们将给出代码示例,帮助读者深入了解和实践该技术。

一键难忘的博客 2318

【Quartz】Quartz存储与持久化-基于Spring的配置

在上文【Quartz】Quartz存储与持久化-基于quartz.properties的配置 ,是通过配置quartz.properties文件的方式来实现持久化的。本文将通过Spring配置的方式来实现存储与持久化。

Evankaka的专栏 1万+

项目报告:基于Sentaurus TCAD的多沟道长度NMOS器件仿真、SPICE模型提取与环形振荡器电路验证

本项目基于Sentaurus TCAD工具,完成了从器件仿真到电路验证的全流程研究。首先构建了45nm、65nm和90nm三种沟道长度的NMOS器件,通过TCAD仿真分析了其电学特性,观察到明显的短沟道效应。随后提取了BSIM4 SPICE模型参数,并生成Hspice可用的模型文件。最后利用该模型设计了11级环形振荡器进行电路验证,证明了模型的实用性。研究结果表明,随着沟道长度缩短,器件性能虽有所提升,但短沟道效应导致关态电流显著增加,影响整体能效。本项目为纳米尺度MOSFET的建模与电路设计提供了完整的技

huanghm88的专栏 285

Spring+SpringMVC+Quartz 持久化存储与数据源配置

一、前言 最近工作需求,需要整合一个quartz框架的管理界面,要求数据持久化,前端界面管理。方便管理所有的定时任务,同时进行任务状态的监控。 相关技术: spring springMvc mybatis【这个看你们自己使用的数据源】 quartz 二、前端界面 前端界面各位请自行查找,不管是使用jquery还是vue。只要能实现请求发送就行。界面要实现基础的增删查改,暂停启动。 具体可以参考这篇文档,界面可以直接参照使用。https://blog.youkuaiyun.com/u012907049.

qq_26430717的博客 1667

使用lighttpd和开发板进行交互

本文介绍了如何在嵌入式开发板上使用Lighttpd Web服务器实现硬件交互功能。主要内容包括:Lighttpd通过CGI程序间接控制硬件的基本原理;lighttpd.conf配置文件的详细解析;开发板文件目录结构设计;用C语言编写控制GPIO的CGI程序示例;网页调用CGI实现按钮触发控制的HTML代码;常见问题调试建议。最后通过效果图展示了网页按钮点击后成功控制LED灯的实际效果,验证了Lighttpd+CGI方案在嵌入式设备Web控制中的可行性。

m0_49476241的博客 1430

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

spring整合quartz并持久化

spring整合quartz有两种方式: 一.常见是使用配置文件,将定时任务保存到内存中 简单示例:          Xml代码          bean id="overdueRecall"           class="com.sursen.souba.ddlibserve.quartz.OverdueRecallTimerTask" />

东方白 1842

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Spring整合Quartz,并持久化Job到MySQL

1、创建项目 2、创建quartz数据库,并导入Quartz的SQL脚本 mysql> use quartz Database changed mysql> show tables; +--------------------------+ | Tables_in_quartz | +--------------------------+ | QRTZ_BLO

gp490609578的博客 7765

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

spring整合quartz持久化

spring整合quartz有两种方式: 一.常见是使用配置文件,将定时任务保存到内存中 简单示例:          Xml代码          bean id="overdueRecall"           class="com.sursen.souba.ddlibserve.quartz.OverdueRecallTimerTask" />

jingqiang521的专栏 751

SpringBoot整合Quartz定时任务(持久化到数据库)

背景 最近在做项目,项目中有个需求:需要使用定时任务,这个定时任务需要即时生效。 查看Quartz官网之后发现:Quartz提供两种基本作业存储类型: RAMJobStore :RAM也就是内存,默认情况下Quartz会将任务调度存在内存中,这种方式性能是最好的,因为内存的速度是最快的。不好的地方就是数据缺乏持久性,但程序崩溃或者重新发布的时候,所有运行信息都会丢失 JDBC作业存储:存到数据库...

我是你妹她哥的博客 6万+

Quartz(二)整合Spring容器中bean及动态调度任务

Quartz 是开源任务调度框架中的翘首,它提供了强大任务调度机制,同时保持了使用的简单性。  Quartz 允许开发人员灵活地定义触发器的调度时间表,并可以对触发器和任务进行关联映射。  此外,Quartz提供了调度运行环境的持久化机制,可以保存并恢复调度现场,即使系统因故障关闭,任务调度现场数据并不会丢失。  此外,Quartz还提供了组件式的侦听器、各种插件、线程池等功能。  S

dos_186的博客 623

spring整合quartz(持久化数据库)

spring整合quartz(持久化数据库)一、spring整合quartz背景需求1、添加依赖2、添加注解3、创建QuartzUtils工具类4、创建CronUtils工具类5、创建定时job6、业务逻辑调用二、quartz数据持久化数据库为什么要持久化1、添加配置文件2、添加核心配置类3、添加JobFactory类 一、spring整合quartz Quartz是一个开源的任务调度框架。基于定时、定期的策略来执行任务是它的核心功能。 Quartz有3个核心要素: 调度器(Scheduler)、 任务(J

qq_45887180的博客 4290

Quartz集群原理及配置应用

1、Quartz任务调度的基本实现原理   Quartz是OpenSymphony开源组织在任务调度领域的一个开源项目,完全基于Java实现。作为一个优秀的开源调度框架,Quartz具有以下特点:     (1)强大的调度功能,例如支持丰富多样的调度方法,可以满足各种常规及特殊需求;     (2)灵活的应用方式,例如支持任务和调度的多种组合方式,支持调度数据的多种存储方式;     (3...

weixin_30607659的博客 115

quartz之简单应用二

继第一篇

lao4j的博客 277
上一篇: Quartz存储与持久化-基于quartz.properties的配置
下一篇: 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
nigel-wang
博客等级 码龄10年 6粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值