zoukankan      html  css  js  c++  java
  • 004-Quartz存储与持久化-基于quartz.properties的配置

    一、概述

      Quartz提供两种基本作业存储类型。第一种类型叫做RAMJobStore,第二种类型叫做JDBC作业存储。在默认情况下Quartz将任务调度的运行信息保存在内存中,这种方法提供了最佳的性能,因为内存中数据访问最快。不足之处是缺乏数据的持久性,当程序路途停止或系统崩溃时,所有运行的信息都会丢失。

      比如我们希望安排一个执行100次的任务,如果执行到50次时系统崩溃了,系统重启时任务的执行计数器将从0开始。在大多数实际的应用中,我们往往并不需要保存任务调度的现场数据,因为很少需要规划一个指定执行次数的任务。对于仅执行一次的任务来说,其执行条件信息本身应该是已经持久化的业务数据(如锁定到期解锁任务,解锁的时间应该是业务数据),当执行完成后,条件信息也会相应改变。当然调度现场信息不仅仅是记录运行次数,还包括调度规则、JobDataMap中的数据等等。

      如果确实需要持久化任务调度信息,Quartz允许你通过调整其属性文件,将这些信息保存到数据库中。使用数据库保存任务调度信息后,即使系统崩溃后重新启动,任务的调度信息将得到恢复。如前面所说的例子,执行50次崩溃后重新运行,计数器将从51开始计数。使用了数据库保存信息的任务称为持久化任务。

    对比

    类型

    优点

    缺点

    RAMJobStore

    不要外部数据库,配置容易,运行速度快

    因为调度程序信息是存储在被分配给JVM的内存里面,所以,当应用程序停止运行时,所有调度信息将被丢失。另外因为存储到JVM内存里面,所以可以存储多少个Job和Trigger将会受到限制

    JDBC作业存储

    支持集群,因为所有的任务信息都会保存到数据库中,可以控制事物,还有就是如果应用服务器关闭或者重启,任务信息都不会丢失,并且可以恢复因服务器关闭或者重启而导致执行失败的任务

    运行速度的快慢取决与连接数据库的快慢

    二、quartz存储实例

    2.1、建立数据存储表

      从下载到的quartz包里面找到对应的sql脚本。

      脚本位置:quartz-1.8.6quartz-1.8.6docsdbTables,mysql使用:tables_mysql_innodb.sql

      1.在数据中建立了一个quartz的database,执行以上脚本

        使用以上脚本可能会出现问题,将tables_mysql_innodb.sql中的TYENGINEPE=InnoDB或者TYPE=InnoDB全部都替换成ENGINE=InnoDB即可

    2.2、新建工程,增加依赖

      新建工程参看:http://www.cnblogs.com/bjlhx/p/7059671.html

      增加pom依赖:mysql驱动,quartz包,common-lang等

     

     

     

     

     

      

     

     

     

     

     

  • 相关阅读:
    基于事件的异步编程
    基于任务的异步编程
    C#异步编程
    C#2.0
    Mac上安装Brew
    PHP中三维数组转二位数组,并且根据某个字段去重
    LNMP环境安装Laravel之后, 除了根目录下可以访问, 其他都是404页面
    LNMP一键安装包安装的mysql远程连接不上的问题
    CentOS7 安装Redis4.0
    CentOS 7 源码包安装SVN及使用
  • 原文地址:https://www.cnblogs.com/bjlhx/p/7071090.html
Copyright © 2011-2022 走看看