`

quartz 集群环境配置

 
阅读更多
quartz是很好与spring结合,进行定时任务控制,但在集群环境下怎么去配置呢?
在集群环境下需要做一下几个步骤:
1、下载quartz相应版本的数据库表(11张),把对应版本的数据库表导入到数据库中

2.在项目src下新建quartz.properties
#============================================================================
# Configure JobStore  
# Using Spring datasource in quartzJobsConfig.xml
# Spring uses LocalDataSourceJobStore extension of JobStoreCMT
#============================================================================
org.quartz.jobStore.useProperties=true
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 5000
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.txIsolationLevelReadCommitted = true
 
# Change this to match your DB vendor
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
 

#============================================================================
# Configure Main Scheduler Properties  
# Needed to manage cluster instances
#============================================================================
org.quartz.scheduler.instanceId=AUTO
org.quartz.scheduler.instanceName=MY_CLUSTERED_JOB_SCHEDULER
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false


#============================================================================
# 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

3、配置quartz.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

	<!-- 配置数据源 -->
	<bean id="quartz_dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />		
		
		<property name="url" value="jdbc:mysql://localhost:3306/weichuxing?characterEncoding=UTF-8" />
		<property name="username" value="root" />
		<property name="password" value="root" />	
		
				
		<property name="maxActive" value="5" />
		<property name="maxIdle" value="3" />
		<property name="validationQuery"> 
			<value>SELECT 1</value> 
		</property> 
		<property name="testOnBorrow"> 
			<value>true</value> 
		</property> 
	</bean>
	
	<!-- 配置事务管理器 -->
	<bean id="quartz_transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="quartz_dataSource" />
	</bean>	
	
	<!-- 服务端定时推送消息给终端 -->	 
	<bean id="serverPushJobTask" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="cn.xzyd88.event.quartz.ServerPushMessageQuartzSupport" />
        <property name="requestsRecovery" value="false"/>
    </bean>
    
	<bean id="serverPushTrigger" class="com.tool.PersistableCronTriggerFactoryBean">
		<property name="jobDetail">
			<ref bean="serverPushJobTask" />
		</property>
		<!-- cron表达式 (秒 分 小时 日 月 星期)-->
		<property name="cronExpression">
			<value>0 */2 * * * ?</value>
		</property>
	</bean>
		
	<!-- 定义redis同步数据到数据库触发时间 -->
	<bean id="redisJobTask" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="cn.xzyd88.event.quartz.SynchronizationRedisSupport" />
        <property name="requestsRecovery" value="false"/>
    </bean>
	<bean id="redisTrigger" class="com.tool.PersistableCronTriggerFactoryBean">
		<property name="jobDetail">
			<ref bean="redisJobTask" />
		</property>
		<!-- cron表达式 (秒 分 小时 日 月 星期)-->
		<property name="cronExpression">
			<value>0 */1 * * * ?</value>
		</property>
	</bean>		
		<!-- 订单超时处理类 -->
	<bean id="delayHandler" class="cn.xzyd88.order.guard.OrderDelayHandler"></bean>
	<!-- 定义调用对象和调用对象的方法 -->
	<bean id="delayHandlerTask"
		class="org.springframework.scheduling.quartz.JobDetailBean">
		<!-- 调用的类 -->
		<property name="jobClass" value="cn.xzyd88.event.quartz.OderDelayHandlerSupport">
		</property>
		 <property name="requestsRecovery" value="false"/>
	</bean>
		<!-- 定义触发时间 -->
	<bean id="delayHandlerTime" class="com.tool.PersistableCronTriggerFactoryBean">
		<property name="jobDetail">
			<ref bean="delayHandlerTask" />
		</property>
		<!-- cron表达式 (秒 分 小时 日 月 星期)  每小时清空一次-->
		<property name="cronExpression">
			<value>0 */1 * * * ?</value>
		</property>
	</bean>
	<!-- 客服通知定时job -->
	<bean id="notificationJob" class="cn.xzyd88.tordercar.TOrderCarRuning">
		<property name="mgrTCarRuningService1" ref="mgrTCarRuningService1"></property> 
		<property name="mgrTOrderCarService1" ref="mgrTOrderCarService1"></property> 
		<property name="byPhoneService" ref="byPhoneService"></property> 
		<property name="mgrCustomerService1" ref="mgrCustomerService1"></property> 
	</bean>
	<bean id="notificationTask" class="org.springframework.scheduling.quartz.JobDetailBean">
		<property name="jobClass" value="cn.xzyd88.event.quartz.NotificationSupport" />
        <property name="requestsRecovery" value="false"/>
	</bean>		
	<bean id="notificationTrigger" class="com.tool.PersistableCronTriggerFactoryBean">
		<property name="jobDetail">
			<ref bean="notificationTask" />
		</property>
		<!-- cron表达式 (秒 分 小时 日 月 星期)-->
		<property name="cronExpression">
			<value>0 0/5 9,23 * * ?</value>
		</property>
	</bean>	
	
	
	<!-- 企业订单超时处理job -->
	<bean id="enterpriseOrderTimeOutJob" class="com.tool.QuartzJob">
	  <property name="mgrTOrderCancelCountService1" ref="mgrTOrderCancelCountService1"></property> 
	  <property name="mgrTSysparaService1" ref="mgrTSysparaService1"></property> 
	</bean>
	<bean id="enterpriseOrderTimeOutTask" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="cn.xzyd88.event.quartz.EnterpriseOrderTimeOutSupport" />
        <property name="requestsRecovery" value="false"/>
    </bean>	
	<bean id="enterpriseOrderTrigger" class="com.tool.PersistableCronTriggerFactoryBean">
		<property name="jobDetail">
			<ref bean="enterpriseOrderTimeOutTask" />
		</property>
		<!-- cron表达式 (秒 分 小时 日 月 星期)  每小时清空一次-->
		<property name="cronExpression">
			<value>0 0 0/4 * * ? </value>
		</property>
	</bean>
	
	
	
    <bean id="quertz_executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
         <property name="corePoolSize" value="10" />
         <property name="maxPoolSize" value="100" />
         <property name="queueCapacity" value="500" />
    </bean>
    
	<bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="configLocation" value="classpath:/quartz.properties" />
        <property name="dataSource" ref="quartz_dataSource" />
        <property name="transactionManager" ref="quartz_transactionManager" />
        <property name="schedulerName" value="xzyd_quartzScheduler" />
        <property name="overwriteExistingJobs" value="true" />
        <property name="startupDelay" value="1"/>
        <property name="applicationContextSchedulerContextKey" value="applicationContext" /> 
        <property name="jobFactory">
            <bean class="com.tool.AutowiringSpringBeanJobFactory" />
        </property>
		<property name="triggers">
			<list>
				<ref bean="serverPushTrigger" />
				<ref bean="redisTrigger" />  
				<ref bean="notificationTrigger" />
				<ref bean="enterpriseOrderTrigger" />   
				<ref bean="delayHandlerTime" />   
			</list>
		</property>
		<property name="jobDetails">
            <list>
                <ref bean="serverPushJobTask" />
                <ref bean="redisJobTask" />
                <ref bean="notificationTask" />
                <ref bean="enterpriseOrderTimeOutTask" /> 
                <ref bean="delayHandlerTask" /> 
            </list>
        </property>
        <property name="taskExecutor" ref="quertz_executor" />      
	</bean>

</beans>

4.重写org.springframework.scheduling.quartz.CronTriggerBean
PersistableCronTriggerFactoryBean.java
package com.tool;

import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
import org.springframework.scheduling.quartz.JobDetailAwareTrigger;

/**
 * Needed to set Quartz useProperties=true when using Spring classes,
 * because Spring sets an object reference on JobDataMap that is not a String
 * 
 * @see http://site.trimplement.com/using-spring-and-quartz-with-jobstore-properties/
 * @see http://forum.springsource.org/showthread.php?130984-Quartz-error-IOException
 */
public class PersistableCronTriggerFactoryBean extends CronTriggerFactoryBean {
    @Override
    public void afterPropertiesSet() {
        super.afterPropertiesSet();
 
        //Remove the JobDetail element
        getJobDataMap().remove(JobDetailAwareTrigger.JOB_DETAIL_KEY);
    }
}

5.jobClass 继承QuartzJobBean 重写
EnterpriseOrderTimeOutSupport.java
package cn.xzyd88.event.quartz;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

import com.tool.QuartzJob;
import com.tool.SpringContextUtil;

public class EnterpriseOrderTimeOutSupport extends QuartzJobBean {
	@Override
	protected void executeInternal(JobExecutionContext arg0)
			throws JobExecutionException {
		QuartzJob quartzJobObj = (QuartzJob) SpringContextUtil.getBean("enterpriseOrderTimeOutJob");
		quartzJobObj.work();
	}
}


6.把应用部署到不同环境下,进行测试。
  • 大小: 3.6 KB
分享到:
评论

相关推荐

    spring + quartz 集群配置

    java + quartz实现定时任务,实现集群配置,在集群环境下多节点运行定时Quartz定任务,就会存在重复处理任务的现象,为解决这一问题,下面我将介绍使用 Quartz 的 TASK ( 12 张表)实例化到数据库,基于数据库自动...

    Quartz集群配置.doc

    OpenSymphony所提供的...此外,Quartz提供了调度运行环境的持久化机制,可以保存并恢复调度现场,即使系统因故障关闭,任务调度现场数据并不会丢失。此外,Quartz还提供了组件式的侦听器、各种插件、线程池等功能。

    Quartz-Job-Scheduling-Framework-中文版-V0.9.1.zip

    内容提要:如何配置使 Quartz 节点工作在集群环境中。 第十一章. Quartz 集群 (第四部分) 内容提要:运行 Quartz 集群节点,及提供了一个关于使用 Quartz 集群的 Cookbook 参考。 第十二章. Quartz Cookbook (第一...

    完美解决多应用服务器负载均衡环境下spring quartz同一定时任务重复执行问题

    NULL 博文链接:https://medbricom.iteye.com/blog/1782765

    Quartz开源作业调度库-其他

    Quartz Scheduler包含许多企业级功能,例如对JTA事务和集群的支持。 Quartz是免费使用的,并根据Apache 2.0许可获得许可。 Quartz作业调度的示例用法: 1、推动流程工作流程:最初下达新订单时,安排一个Job在正好2...

    全新JAVAEE大神完美就业实战课程 超150G巨制课程轻松实战JAVAEE课程 就业部分.txt

    day01_电商介绍--互联网术语-SOA-分布式-集群介绍-环境配置-框架搭建 day02_Dubbo介绍_dubbo框架整合_商品列表查询实现_分页_逆向工程 day03_Git day04_门户网站介绍&商城首页搭建&内容系统创建&CMS实现 day05_...

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ 06-搭建Redis的集群环境.avi │ 08-插槽的分配和key的关系.avi │ 09-新增节点.avi │ 10-移除集群中的节点.avi │ 11-集群的故障转移.avi │ 12-MySQL的查询优化.avi │ 13-数据库结构优化.avi │ 14-插入数据的...

    forest:分布式任务调度平台,分布式,任务调度,schedule,scheduler

    在企业系统开发过程中难免少不了一些定时任务来进行定时触发执行任务,对于非分布式环境系统中,我们只需要在对应系统中内部集成一些调度库进行配置定时触发即可。 比如:使用Spring框架集成quartz,只需要进行一些...

    spring-boot示例项目

    该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户...

    Spring.3.x企业应用开发实战(完整版).part2

    17.5.1 配置Unitils测试环境 17.5.2 准备测试数据库及测试数据 17.5.3 编写DAO测试基类 17.5.4 编写BoardDao测试用例 17.6 服务层开发 17.6.1 UserService的开发 17.6.2 ForumService的开发 17.6.3 服务类Bean的装配...

    Spring3.x企业应用开发实战(完整版) part1

    17.5.1 配置Unitils测试环境 17.5.2 准备测试数据库及测试数据 17.5.3 编写DAO测试基类 17.5.4 编写BoardDao测试用例 17.6 服务层开发 17.6.1 UserService的开发 17.6.2 ForumService的开发 17.6.3 服务类Bean的装配...

    单点登录源码

    单点登录, SSM框架公共模块 ├── zheng-admin -- 后台管理模板 ├── zheng-ui -- 前台thymeleaf模板[端口:1000] ...## 环境搭建(QQ群内有“zheng环境搭建和系统部署文档.doc”) #### 开发工具: ...

Global site tag (gtag.js) - Google Analytics