开源项目
知识点
相关文章
更多最近更新
更多quartz 集群环境配置
2019-03-26 16:14|来源: 网路
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.把应用部署到不同环境下,进行测试。
相关问答
更多-
quartz的安装问题[2022-07-03]
设置好环境变量假设你安装在C:\\Program Files\\jdk1.5.0_02 变量名:JAVA_HOME 变量值:C:\\Program Files\\Java\\j2sdk1.5.0 变量名:Path 变量值:C:\\Program Files\\Java\\j2sdk1.5.0\\bin 变量名:CLASSPATH 变量值:.;C:\\Program Files\\Java\\j2sdk1.5.0\\lib\\tools.jar;C:\\Program Files\\Java\\j2sdk1. ... -
在spring中如何配置quartz使得quartz能动态[2022-05-31]
我这有一个动态quartz的实例,可以在页面中动态填写job名、cronExpression表达式;要的话把邮箱给我,数据库是mysql的。 另外,记得多加点分给我,15分太少了。我花了半个月才搞定的~_~ -
在spring中如何配置quartz使得quartz能动态[2022-07-30]
我这有一个动态quartz的实例,可以在页面中动态填写job名、cronExpression表达式;要的话把邮箱给我,数据库是mysql的。 另外,记得多加点分给我,15分太少了。我花了半个月才搞定的~_~ -
quartz 集群和非集群配置的区别[2023-06-21]
橥倍际怯蓂uartz,那么就有可能出现集群,如果所有的都是使用ramStore的形式存储任务,则只需要简单的定义管理器 评论0 0 0 加载更多 -
你很可能在你的类路径中有两个Quartz JAR副本 - JBoss有自己的副本,你的应用程序也可能在它的lib目录中有一个副本。 两人发生冲突。 从您的应用程序中删除JAR,然后重试。 You most likely have two copies of the Quartz JAR in your classpath - JBoss has its own copy, and your application probably has one too, in its lib directory. The ...
-
JBoss和Quartz(JBoss and Quartz)[2023-05-22]
这是一个类加载问题。 JBoss已经在其类路径中使用了org.quartz.spi.ClassLoadHelper.class ,因为JBoss将它用于不同任务的内部计时器。 JBoss提供的quartz.jar位于/jboss-as/common/lib/quartz.jar 。 因此,您正在为您的应用程序提供另一个quartz.jar ,这会导致与JBoss提供的现有石英类冲突。 要解决此问题,您有两种选择: 选项1 。 从你的耳朵中取出石英罐并加以战争。 在我看来,这是更好更容易的选择,除非由于某种原 ... -
是的,您需要使用JDBC-JobStore,或者TerracottaJobStore来启用节点相互通信的机制(在一种情况下,它们在db表中进行通信,在另一种情况下通过Terracotta网络功能进行通信)。 Yes, you need to use the JDBC-JobStore, or else the TerracottaJobStore to enable a mechanism for the nodes to communicate with each other (in the one ca ...
-
Quartz集群不起作用(Quartz clustering not working)[2023-10-21]
您正在JBoss上运行Quartz,因此请考虑使用HASingleton来控制主节点 - 然后您不需要使用Quartz提供的集群,Quartz使用数据库并导致问题。 HASingleton自JBoss 4或5开始提供。如果您使用的是版本7,那么您可以查看这篇文章 ,了解有关其实现的详细信息 I think I have found the solution! I disabled job file's auto scanning by doing this: org.quartz.plugin.jobIni ... -
没有不同。 它们基本上是名称 - 价值对。 您可以将一半放在.xml中,如果需要,可以编写一半的代码。 我倾向于把大部分/全部放在.xml中。 No difference. They're basically Name-Value-Pairs. You can put half in .xml, and code up half of them if you want. I tend to put most/all in .xml.
-
运行quartz.net包中包含的Oracle表创建脚本。 我认为该脚本位于Quartz \ database \ tables \ tables_oracle.sql下 修改Quartz.Config quartz.jobStore.tablePrefix = your table prefix , I think default is QRTZ_ quartz.jobStore.dataSource = myDS quartz.dataSource.myDS.connectionString = y ...