最佳实践:利用Quartz实现任务调度的集群
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
创建测试job
public class TestJobBus1 implements IJob{
private static Log log=LogFactory.getLog(TestJobBus1.class);
/**
*TEST
*/
public void executeInternal(){
try {
System.out.println("-------------TestJobBus1
start-------------"+ InetAddress.getLocalHost());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
3.4.配置Quartz 使用集群
3.4.1.配置节点的quartz.properties 文件
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.instanceId = AUTO
#org.quartz.scheduler.rmi.export = false
#org.quartz.scheduler.rmi.proxy = false
#org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
#==================================================================== ========
# Configure ThreadPool
#==================================================================== ========
#org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
#org.quartz.threadPool.threadCount = 10
#org.quartz.threadPool.threadPriority = 5
#org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializing Thread = true
#==================================================================== ========
# Configure JobStore
#==================================================================== ========
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass =
org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
org.quartz.jobStore.misfireThreshold = 60000
eProperties = false
org.quartz.jobStore.tablePrefix = QRTZ_
#org.quartz.jobStore.dataSource = myDS
<property name="startupDelay" value="2"></property>
<property name="applicationContextSchedulerContextKey"
value="applicationContext" />
</bean>
<!--
********************************************testJob1***************** *************************** -->
<bean id="testJob1"
class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="testJobDetail1" />
<property name="cronExpression" value="${TescronExpression1}" /> </bean>
<bean id="testJobDetail1"
class="com.grgbanking.view.scheduling.MethodInvokingJobDetailFactoryB ean">
<property name="concurrent" value="false" />
<property name="shouldRecover" value="true"></property>
<property name="targetObject" ref="testJobBus1" />
<property name="targetMethod"
value="executeInternal"></property>
</bean>
<bean id="testJobBus1"
class="com.grgbanking.view.scheduling.TestJobBus1">
</bean>
</beans>
dataSource:项目中用到的数据源,里面包含了quartz用到的12张数据库表;
applicationContextSchedulerContextKey:是org.springframework.scheduling.quartz.SchedulerFactoryBean这个类中把spring上下文以key/value的方式存放在了quartz的上下文中了,可以用applicationContextSchedulerContextKey所定义的key得到对应的spring上下文;
configLocation:用于指明quartz的配置文件的位置
关于Job配置,这里有两点需要注意MethodInvokingJobDetailFactoryBean
在这里使用网上牛人修改后的frameworkx.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean (此案例我改包名为:com.grgbanking.view.scheduling),此类在网上可以下载,直接使用org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean 会报java.io.NotSerializableException异常。
shouldRecover
节点2。