spring quartz集群

原创 2016年05月31日 14:48:56

1.applicationContext.xml

<bean id="custTicketJobDetail" class="org.springframework.scheduling.<span style="color:#ff0000;">quartz.JobDetailBean</span>">
      <property name="jobClass">
         <value><span style="color:#ff0000;">com.555.common.MyDetailQuartzJobBean</span></value>
      </property>
      <property name="jobDataAsMap">
        <map>
            <entry key="targetObject" value="customerTicketService" />
          	<entry key="targetMethod" value="updateCustTicketStatus" />
	   	</map>
	 </property>
	 <property name="durability" value="true" />   
	</bean>

	<bean id="custTicketTrigger"
		class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail"><!-- jobDetail是Spring定时器的特殊属性targetObject -->
			<ref bean="custTicketJobDetail" />
		</property>
		<property name="cronExpression">
			<!-- 每天的凌晨10分时触发 -->
			<value>0/5 * * * * ?</value><!-- cronExpression是Spring定时器的特殊属性 -->
		</property>
		<!-- <property name="startDelay">延时1分钟启动定时任务
			<value>60000</value>
		</property> -->
	</bean>

<bean autowire="no"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="dataSource">
            <ref bean="DataSource"/>
        </property>
		<property name="applicationContextSchedulerContextKey" value="applicationContext" />  
		<property name="configLocation" value="classpath:quartz.properties" />
		<property name="triggers">    <!-- triggers是Spring定时器的特殊属性 -->
			<list>
				<ref bean="custTicketTrigger" />
			</list>
		</property>
	</bean>

2.MyDetailQuartzJobBean.java     用反射机制动态调用job方法

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.quartz.SchedulerContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.WebApplicationContext;

public class MyDetailQuartzJobBean extends QuartzJobBean implements
		ApplicationContextAware {
	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>>>>>>");

			WebApplicationContext webContext = ContextLoaderListener
					.getCurrentWebApplicationContext();

			// ApplicationContext ctx =ContextUtil.getContext();
			/*
			 * WebApplicationContext ctx = (WebApplicationContext) context
			 * .getScheduler().getContext().get("applicationContext");
			 */
			Object otargetObject = webContext.getBean(targetObject);
			Method m = null;
			try {
				m = otargetObject.getClass().getMethod(targetMethod,
						new Class[] {});

				m.invoke(otargetObject, new Object[] {});
			} 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;
	}
}


3.quartz.properties

org.quartz.scheduler.instanceName = TestScheduler1   
org.quartz.scheduler.instanceId = AUTO  

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.threadPool.threadPriority = 2
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

org.quartz.jobStore.misfireThreshold = 60000
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.maxMisfiresToHandleAtATime=10
org.quartz.jobStore.isClustered = true  
org.quartz.jobStore.clusterCheckinInterval = 20000


遇到问题1.customerTicketService要实现序列化

2.使用的jar包:quartz-1.6.1.jar,commons-dbcp-1.2.jar,commons-collections-3.2.1.jar,commons-pool-1.6.jar,commons-logging-1.1.3.jar,spring3.x.jar

3.上下文的问题

4.用org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean指定类和方法,但是直接使用会报Java.io.NotSerializableException异常

5.添加quartz的12个表   quartz-1.8.6\docs\dbTables  mysql或者oracle表


spring3+quartz1.6.4 集群示例

  • 2016年09月20日 16:49
  • 5.07MB
  • 下载

spring4.0.6+quartz 2.2.3 集群示例

  • 2016年09月20日 16:32
  • 2.83MB
  • 下载

spring boot下定时任务quartz的集群使用

单机模式下的定时任务调用很简单,有很多可实现的方案,这里不多说了。 这里说一下集群部署的情况下,定时任务的使用。这种情况下,quartz是一个比较好的选择。简单,稳定。 想象一下,现在有 ...
  • KokJuis
  • KokJuis
  • 2017年11月14日 09:52
  • 106

Spring集群整合Quartz

  • 2016年12月08日 16:07
  • 7.29MB
  • 下载

Spring Quartz Job 集群 终极解决方案

  • 2013年05月31日 15:55
  • 5.31MB
  • 下载

spring+quartz集群下复杂应用

项目环境,weblogic集群,quartz版本1.6.6。 一、应用实例 1. spring配置:

Spring中定时任务Quartz集群配置学习

原 来配置的Quartz是通过spring配置文件生效的,发现在非集群式的服务器上运行良好,但是将工程部署到水平集群服务器上去后改定时功能不能正常运 行,没有任何错误日志,于是从jar包、JDK版本、...

在Spring中使用Quartz任务调度支持集群(转载)

虽然在Quartz上有配置Quartz集群Clustering ,但是在Spring中使用Quartz任务调度并支持集群系统却有些问题,下面介绍解决办法: 环境:(环境非常重要,注意版本号) ...
  • dos_186
  • dos_186
  • 2015年08月20日 15:42
  • 829

Quartz+Spring 分布式定时任务调度(二)- 集群配置

Quartz 分布式任务调度

Spring4整合quartz2.3,集群定时任务处理

概述 虽然单个Quartz实例能给予你很好的Job调度能力,但它不能满足典型的企业需求,如可伸缩性、高可靠性满足。假如你需要故障转移的能力并能运行日益增多的 Job,Quartz集群势必成为你应...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring quartz集群
举报原因:
原因补充:

(最多只允许输入30个字)