异常信息
Failure obtaining db row lock: 第 1 行: 只有 DECLARE CURSOR 才允许使用 FOR UPDATE 子句。
只有 DECLARE CURSOR 才允许使用 FOR UPDATE 子句
修改方法
<prop key="org.quartz.jobStore.selectWithLockSQL">SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?</prop>
集群配置
背景
quartz:1.8.4
spring:3.0.5.RELEASE
配置
<bean id="testQuartz" class="com.test.quartz.TestQuartz" />
<bean id="timingScheduleJobDetail" class="frameworkx.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 定时执行的类 -->
<property name="targetObject" ref="testQuartz"/>
<!-- 具体的方法 -->
<property name="targetMethod" value="方法名称"/>
</bean>
<bean id="timingScheduleTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<!-- 加入相关的执行类和方法 -->
<property name="jobDetail" ref="timingScheduleJobDetail"/>
<!-- 设置时间规则 (为了方便测试,设置成一分钟一次。具体的规则见详情)-->
<property name="cronExpression" value="0 0/1 * ?"/>
<property name="description" value="该方法用来测试" />
</bean>
<bean id="startQuartz"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean" autowire="no">
<property name="dataSource" ref="dataSource" />
<property name="quartzProperties">
<props>
<prop key="org.quartz.scheduler.instanceName">gzxh_fxy</prop>
<prop key="org.quartz.scheduler.instanceId">AUTO</prop>
<!-- 线程池配置 -->
<prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
<prop key="org.quartz.threadPool.threadCount">5</prop>
<prop key="org.quartz.threadPool.threadPriority">1</prop>
<!-- JobStore 配置 -->
<prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
<!-- 集群配置 -->
<prop key="org.quartz.jobStore.isClustered">true</prop>
<prop key="org.quartz.jobStore.clusterCheckinInterval">15000</prop>
<prop key="org.quartz.jobStore.maxMisfiresToHandleAtATime">1</prop>
<!-- 暂停多少时间弥补执行 -->
<prop key="org.quartz.jobStore.misfireThreshold">1500</prop>
<prop key="org.quartz.jobStore.selectWithLockSQL">SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?</prop>
<prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop>
</props>
</property>
<property name="schedulerName" value="gzxh_fxy" />
<!--必须的,QuartzScheduler 延时启动,应用启动完后 QuartzScheduler 再启动 -->
<property name="startupDelay" value="100" />
<property name="applicationContextSchedulerContextKey" value="applicationContextKey" />
<!--可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 -->
<!-- value =false 不往数据库加载当前配置时间数据 -->
<property name="overwriteExistingJobs" value="true" />
<!-- 设置自动启动 -->
<property name="autoStartup" value="true" />
<property name="triggers">
<list>
<ref bean="timingScheduleTrigger" />
</list>
</property>
</bean>
注意点:
TestQuartz需继承Serializable
重写MethodInvokingJobDetailFactoryBean
参考文章:
https://www.cnblogs.com/chjun2000/archive/2012/07/22/2604129.html
http://mushme.iteye.com/blog/1874370(重写MethodInvokingJobDetailFactoryBean)
转载于:https://blog.51cto.com/2074199/2114140