quartz 集群环境配置

quartz是很好与spring结合,进行定时任务控制,但在集群环境下怎么去配置呢?
在集群环境下需要做一下几个步骤:
1、下载quartz相应版本的数据库表(11张),把对应版本的数据库表导入到数据库中
[img]http://dl2.iteye.com/upload/attachment/0112/6146/be55a55b-b62f-3082-a214-dfa521eefad6.png[/img]
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.把应用部署到不同环境下,进行测试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值