Spring 弹簧、石英和JobStoreTX

Spring 弹簧、石英和JobStoreTX,spring,quartz-scheduler,Spring,Quartz Scheduler,通过使用CronTriggerBean我创建了两个触发器(比如触发器A和B),用于调用两个不同的操作。我们已经将我们的项目作为.war放置在两台服务器中。我正在使用JobStoreTX进行集群。我面临的问题是,我只想集群一个触发器,即A和触发器B不应该集群。有没有一种方法可以通过代码指定哪个触发器必须集群。我的代码如下 <bean id="shedulerJobStoreTX" class="org.quartz.impl.jdbcjobstore.JobStoreTX> <

通过使用CronTriggerBean我创建了两个触发器(比如触发器A和B),用于调用两个不同的操作。我们已经将我们的项目作为.war放置在两台服务器中。我正在使用JobStoreTX进行集群。我面临的问题是,我只想集群一个触发器,即A和触发器B不应该集群。有没有一种方法可以通过代码指定哪个触发器必须集群。我的代码如下

<bean id="shedulerJobStoreTX" class="org.quartz.impl.jdbcjobstore.JobStoreTX>
  <property name="driverDelegateClass" value="org.quartz.impl. jdbcjobstore.oracle.OracleDelegate">
<property name="dataSource" value ="jndiDS"/>
        <property name="tablePrefix" value="someschemaName"/>
        <property name="isClustered" value="true"/>
<property name="clusterCheckinInterval" value="${someValue}"/>
    </bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">       
        <property name="triggers">
            <list>
                <ref bean="cronTrigger" />
                <ref bean="clusterCronTrigger"/>
            </list>
        </property>
    </bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="runAppJob" />
        <property name="cronExpression" value="${someTimeValue1}"/>
    </bean>
    <bean id="clusterCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="runClusterJob" />
        <property name="cronExpression" value="${someTimeValue2}"/>
    </bean>
由于消息“ORA-00942:表或视图不存在”,我认为表“schemaNameLOCKS”缺失。事实上,从文件中可以看出:

org.quartz.jobStore.selectWithLockSQL

必须是在“LOCKS”表中选择行的SQL字符串,并且 在行上放置一个锁。如果未设置,默认值为“选择*自” {0}锁,其中SCHED_NAME={1}和LOCK_NAME=?用于更新”,其中 适用于大多数数据库。在运行时将“{0}”替换为 您在上面配置的表前缀。将“{1}”替换为 调度程序的名称

由于消息“ORA-00942:表或视图不存在”,我认为表“schemaNameLOCKS”丢失了。事实上,从文件中可以看出:

org.quartz.jobStore.selectWithLockSQL

必须是在“LOCKS”表中选择行的SQL字符串,并且 在行上放置一个锁。如果未设置,默认值为“选择*自” {0}锁,其中SCHED_NAME={1}和LOCK_NAME=?用于更新”,其中 适用于大多数数据库。在运行时将“{0}”替换为 您在上面配置的表前缀。将“{1}”替换为 调度程序的名称


在运行调度程序之前,需要在数据库中创建所需的quartz表

默认的quartz tables sql脚本可在\docs\dbTables中找到

使用quartz 2.2.1发行版时的示例(quartz-2.2.1-distribution.tar\quartz-2.2.1\docs\dbTables\tables\u oracle)

在数据库上执行sql脚本,确保看到在其中创建的表,请参见下图


在运行调度程序之前,您需要在数据库中创建所需的quartz表

默认的quartz tables sql脚本可在\docs\dbTables中找到

使用quartz 2.2.1发行版时的示例(quartz-2.2.1-distribution.tar\quartz-2.2.1\docs\dbTables\tables\u oracle)

在数据库上执行sql脚本,确保看到在其中创建的表,请参见下图

  <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
                <list>
                    <ref bean="cronTrigger" />
                    <ref bean="clusterCronTrigger"/>
                </list>
            </property>
            <property name="quartzProperties">
            <props>
              <prop key="org.quartz.jobStore.isClustered">false</prop> 
              <prop key="org.quartz.scheduler.instanceId">AUTO</prop> 
              <prop key ="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.
   JobStoreTX </prop> 
              <prop key="org.quartz.jobStore.tablePrefix">schemaName</prop> 
              <prop key="org.quartz.jobStore.driverDelegateClass"> org.quartz.impl.jdbcjobstore.oracle.OracleDelegate</prop> 
              <prop key="org.quartz.jobStore.selectWithLockSQL"> SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME= ?</prop>
            </props>
            </property>
            <property name="dataSource" ref="fsmJndiDataSource"/>