spring quartz集群

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表


你可能感兴趣的:(spring,quartz)