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
分享到:
相关推荐
java + quartz实现定时任务,实现集群配置,在集群环境下多节点运行定时Quartz定任务,就会存在重复处理任务的现象,为解决这一问题,下面我将介绍使用 Quartz 的 TASK ( 12 张表)实例化到数据库,基于数据库自动...
OpenSymphony所提供的...此外,Quartz提供了调度运行环境的持久化机制,可以保存并恢复调度现场,即使系统因故障关闭,任务调度现场数据并不会丢失。此外,Quartz还提供了组件式的侦听器、各种插件、线程池等功能。
内容提要:如何配置使 Quartz 节点工作在集群环境中。 第十一章. Quartz 集群 (第四部分) 内容提要:运行 Quartz 集群节点,及提供了一个关于使用 Quartz 集群的 Cookbook 参考。 第十二章. Quartz Cookbook (第一...
NULL 博文链接:https://medbricom.iteye.com/blog/1782765
Quartz Scheduler包含许多企业级功能,例如对JTA事务和集群的支持。 Quartz是免费使用的,并根据Apache 2.0许可获得许可。 Quartz作业调度的示例用法: 1、推动流程工作流程:最初下达新订单时,安排一个Job在正好2...
day01_电商介绍--互联网术语-SOA-分布式-集群介绍-环境配置-框架搭建 day02_Dubbo介绍_dubbo框架整合_商品列表查询实现_分页_逆向工程 day03_Git day04_门户网站介绍&商城首页搭建&内容系统创建&CMS实现 day05_...
│ 06-搭建Redis的集群环境.avi │ 08-插槽的分配和key的关系.avi │ 09-新增节点.avi │ 10-移除集群中的节点.avi │ 11-集群的故障转移.avi │ 12-MySQL的查询优化.avi │ 13-数据库结构优化.avi │ 14-插入数据的...
在企业系统开发过程中难免少不了一些定时任务来进行定时触发执行任务,对于非分布式环境系统中,我们只需要在对应系统中内部集成一些调度库进行配置定时触发即可。 比如:使用Spring框架集成quartz,只需要进行一些...
该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户...
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的装配...
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”) #### 开发工具: ...