springmvc+quartz集群+sqlserver

异常信息

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值