先看看quartz的持久化基本介绍:

引用

1 大家都清楚quartz最基本的概念就是job,在job内调用具体service完成具体功能,quartz需要把每个job存储起来,方便调度,quartz存储job方式就分三种,我们最常用的也是quartz默认的是RAMJobStore,RAMJobStore顾名思义就是把job的相关信息存储在内存里,如果用spring配置quartz的job信息的话,所有信息是配置在xml里,当spirng context启动的时候就把xml里的job信息装入内存。这一性质就决定了一旦JVM挂掉或者容器挂掉,内存中的job信息就随之消失,无法持久化。另外两种方式是JobStoreTX和JobStoreCMT,暂时不讨论这两者的区别,使用这两种JobStore,quartz就会通过jdbc直连或者应用服务器jndi连接数据库,读取配置在数据库里的job初始化信息,并且把job通过java序列化到数据库里,这样就使得每个job信息得到了持久化,即使在jvm或者容器挂掉的情况下,也能通过数据库感知到其他job的状态和信息。      2 quartz集群各节点之间是通过同一个数据库实例(准确的说是同一个数据库实例的同一套表)来感知彼此的。

由上可见,我们需要创建quartz要用的数据库表,此sql文件在:quartz-1.8.6\docs\dbTables。此文件夹下有各个数据库的sql文件,mysql选择tables_mysql.sql。创建相应表。

接下来新建quartz.properties来覆盖jar包中的此文件,新的properties文件放在src的根目录下即可。下面是文件内容:

Java代码  

#==============================================================

#Configure Main Scheduler Properties

#==============================================================

org.quartz.scheduler.instanceName = quartzScheduler

org.quartz.scheduler.instanceId = AUTO

#==============================================================

#Configure JobStore

#==============================================================

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate

org.quartz.jobStore.tablePrefix = QRTZ_

org.quartz.jobStore.isClustered = true

org.quartz.jobStore.clusterCheckinInterval = 20000

org.quartz.jobStore.dataSource = myDS

#==============================================================

#Configure DataSource

#==============================================================

org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver

org.quartz.dataSource.myDS.URL = jdbc:mysql://192.168.20.195:3306/database?useUnicode=true&characterEncoding=UTF-8

org.quartz.dataSource.myDS.user = root

org.quartz.dataSource.myDS.password = 123456

org.quartz.dataSource.myDS.maxConnections = 30

#==============================================================

#Configure ThreadPool

#==============================================================

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount = 10

org.quartz.threadPool.threadPriority = 5

org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

#==============================================================

#Configure Main Scheduler Properties

#==============================================================

org.quartz.scheduler.instanceName = quartzScheduler

org.quartz.scheduler.instanceId = AUTO

#==============================================================

#Configure JobStore

#==============================================================

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate

org.quartz.jobStore.tablePrefix = QRTZ_

org.quartz.jobStore.isClustered = true

org.quartz.jobStore.clusterCheckinInterval = 20000

org.quartz.jobStore.dataSource = myDS

#==============================================================

#Configure DataSource

#==============================================================

org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver

org.quartz.dataSource.myDS.URL = jdbc:mysql://192.168.20.195:3306/database?useUnicode=true&characterEncoding=UTF-8

org.quartz.dataSource.myDS.user = root

org.quartz.dataSource.myDS.password = 123456

org.quartz.dataSource.myDS.maxConnections = 30

#==============================================================

#Configure ThreadPool

#==============================================================

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount = 10

org.quartz.threadPool.threadPriority = 5

org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

可以看到除了数据源、线程池等配置外,我们指定了一个scheduler实例,实例ID为自动分配。

Java代码  

#==============================================================

#Configure Main Scheduler Properties

#==============================================================

org.quartz.scheduler.instanceName = quartzScheduler

org.quartz.scheduler.instanceId = AUTO

#==============================================================

#Configure Main Scheduler Properties

#==============================================================

org.quartz.scheduler.instanceName = quartzScheduler

org.quartz.scheduler.instanceId = AUTO

此外,指定了集群相应配置,检查间隔为20s:

Java代码  

org.quartz.jobStore.isClustered = true

org.quartz.jobStore.clusterCheckinInterval = 20000

org.quartz.jobStore.isClustered = true

org.quartz.jobStore.clusterCheckinInterval = 20000

最后配置applicant-context.xml文件。这里特别要注意一点:

引用

MethodInvokingJobDetailFactoryBean 类中的 methodInvoking 方法,是不支持序列化的,因此在把 QUARTZ 的 TASK 序列化进入数据库时就会抛错。

所以我们要自己实现MethodInvokingJobDetailFactoryBean 的功能,这里用MyDetailQuartzJobBean 替换。

Java代码  

import java.lang.reflect.Method;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

import org.springframework.context.ApplicationContext;

import org.springframework.scheduling.quartz.QuartzJobBean;

public class MyDetailQuartzJobBean extends QuartzJobBean {

protected final Log logger = LogFactory.getLog(getClass());

private String targetObject;

private String targetMethod;

private ApplicationContext ctx;

@Override

protected void executeInternal(JobExecutionContext context)

throws JobExecutionException {

try {

logger.info("execute [" + targetObject + "] at once>>>>>>");

Object otargetObject = ctx.getBean(targetObject);

Method m = null;

try {

m = otargetObject.getClass().getMethod(targetMethod, new Class[] {JobExecutionContext.class});

m.invoke(otargetObject, new Object[] {context});

} catch (SecurityException e) {

logger.error(e);

} catch (NoSuchMethodException e) {

logger.error(e);

}

} catch (Exception e) {

throw new JobExecutionException(e);

}

}

public void setApplicationContext(ApplicationContext applicationContext) {

this.ctx = applicationContext;

}

public void setTargetObject(String targetObject) {

this.targetObject = targetObject;

}

public void setTargetMethod(String targetMethod) {

this.targetMethod = targetMethod;

}

import java.lang.reflect.Method;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.quartz.JobExecutionContext;

import org.quartz.JobExecutionException;

import org.springframework.context.ApplicationContext;

import org.springframework.scheduling.quartz.QuartzJobBean;

public class MyDetailQuartzJobBean extends QuartzJobBean {

protected final Log logger = LogFactory.getLog(getClass());

private String targetObject;

private String targetMethod;

private ApplicationContext ctx;

@Override

protected void executeInternal(JobExecutionContext context)

throws JobExecutionException {

try {

logger.info("execute [" + targetObject + "] at once>>>>>>");

Object otargetObject = ctx.getBean(targetObject);

Method m = null;

try {

m = otargetObject.getClass().getMethod(targetMethod, new Class[] {JobExecutionContext.class});

m.invoke(otargetObject, new Object[] {context});

} catch (SecurityException e) {

logger.error(e);

} catch (NoSuchMethodException e) {

logger.error(e);

}

} catch (Exception e) {

throw new JobExecutionException(e);

}

}

public void setApplicationContext(ApplicationContext applicationContext) {

this.ctx = applicationContext;

}

public void setTargetObject(String targetObject) {

this.targetObject = targetObject;

}

public void setTargetMethod(String targetMethod) {

this.targetMethod = targetMethod;

}

终于到配置spring文件这步了

Java代码  

class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

com.autelan.auteview.lib.util.MyDetailQuartzJobBean

11 11 11 * * ?

// 转载请注明出处http://forhope.iteye.com/blog/1398990

class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

com.autelan.auteview.lib.util.MyDetailQuartzJobBean

11 11 11 * * ?

quartz mysql 表 集群配置_Quartz集群配置相关推荐

  1. quartz mysql 表 集群配置_Spring整合实战丨Quartz 集群配置

    Quartz说明 1.quartz可以通过jdbc直连连接到MYSQL数据库,读取配置在数据库里的job初始化信息,并且把job通过java序列化到数据库里,这样就使得每个job信息得到了持久化,即使 ...

  2. 如何在Ubuntu 16.04上使用MySQL 5.6配置Galera集群

    原作者:梅丽莎安德森  转载翻译:https://www.digitalocean.com/community/tutorials/how-to-configure-a-galera-cluster- ...

  3. MySQL Cluste(进阶篇)—集群配置

    目录 前言 1 概念脑补 1.1 节点组 1.2 分区 1.3 副本 1.4 联系 2 重启类型信息表 3 管理节点配置 3.1 NodeId 3.2 HostName 3.3 LogDestinat ...

  4. Mysql 8 group replication组复制集群单主配置图解

    Mysql 8 MGR集群单主配置图解 声明与简介 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理.本文主要介绍mysql的MGR集群的配置. ...

  5. java集群调度_集群环境下定时调度的解决方案之Quartz集群

    集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...

  6. MyCAT+MySQL 搭建高可用企业级数据库集群

    第1章 课程介绍 课程介绍 1-1 MyCAT导学 试看 1-2 课程介绍 第2章 MyCAT入门 这一章中,我们将回顾了垂直切分,水平切分,分库分表等基础概念,然后快速回如何安装和启动MyCAT的, ...

  7. Mysql8 NDB集群二进制方式免安装配置图解

    Mysql8 NDB集群二进制解压安装配置图解 声明与简介 本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理.本文主要介绍mysql的NDB集群 ...

  8. MariaDB配置、集群

    MariaDB在centos 7.3的安装,配置和集群搭配 阿里云最新选配系统中,只有centos7.3可选,因此,基于centos 7的MariaDB的安装,配置... 全部删除MySQL/Mari ...

  9. mysql 集群操作系统_mysql集群部署

    mysql集群部署 一.软件准备 MySQL版本采用 5.6.35,通过 Oracle 官方网站下载 也可以直接从HTTP文件服务器上获取: 生产环境: wget http://download.cl ...

  10. MHA-结合MySQL半同步复制高可用集群(Centos7)

    目录 一.理论概述 本案例部署思路 二.环境 三.部署 部署MHA 部署二进制包MySQL及部署主从复制 部署半同步复制 配置MHA MHA测试 部署lvs+keepalived(lvs1,lvs2) ...

最新文章

  1. [CCF] 201612-2 工资计算
  2. pycharm 修改新建文件时的头部模板
  3. 如何在Jsp上传图片
  4. leetcode116. 填充每个节点的下一个右侧节点指针
  5. 如何建立“开箱即用”的数据安全防护系统 | 专家对话
  6. 触发器及其应用实验报告总结_2020年中考总复习: 光现象、透镜及其应用知识点总结...
  7. 手机能打开的表白代码_不是程序员都能学会的5个表白代码,一学就会,附源码...
  8. iOS传感器开发——加速度传感器,螺旋仪传感器,磁力传感器的应用
  9. PE恢复linux主引导记录,Linux中系统排错及引导恢复
  10. Git和Github的基本操作
  11. [矩阵] 安排比赛日程(暴力与分治法)
  12. mfc中插入PNG透明图片
  13. pe结构分析之手工修复导入表
  14. ubuntu系统下的磁盘管理
  15. 【智能医疗】人工智能通过模拟疾病进程可预测老年痴呆
  16. FreeRTOS应用——消息队列
  17. 微软“神秘产品”Windows Surface发布会直播汇总
  18. NT平台拨号连接密码恢复原理
  19. systemctl start cloudera-scm-server 启动失败报错!
  20. Flink 从 Checkpoint 中恢复数据

热门文章

  1. animation动画全解
  2. 后端返回文件流PDF文件前端如何实现下载/在线打开
  3. 设置计算机网络密码怎么设置路由器,tplink路由器电脑怎么设置密码?
  4. android 解析接收数据格式,Android JSON数据格式解析
  5. 介绍中国传统节日的网页html,中国传统节日介绍:中秋节
  6. 1990~2003TVB剧集一览表!
  7. 艺术论文题目汇总大全
  8. Linux查找文件路径
  9. Ckplayer视频播放器使用方法介绍
  10. 计算机详细配置快捷键,Win7系统电脑快捷键设置大全