当前位置: 首页 > 面试题库 >

带有Spring Framework的Quartz JobStore

仲孙疏珂
2023-03-14
问题内容

我正在使用Spring Framework在Oracle DB上实现Quartz Job Store。我的ApplicationContext.xml在下面

<bean id="driverJob" class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="jobClass" value="BatchFileCollector" />
</bean>

<bean id="ranchTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
    <property name="jobDetail" ref="driverJob" />
    <property name="startDelay" value="2000" />
    <property name="repeatInterval" value="10000" />
</bean>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="ranchTrigger" />
        </list>
    </property>
    <property name="dataSource">
        <ref bean="dataSource.TEXAN"/>
    </property>
    <property name="applicationContextSchedulerContextKey">
        <value>applicationContext</value>
    </property>
    <property name="autoStartup">
        <value>true</value>
    </property>
    <property name="configLocation" value="classpath:quartz.properties"/>
</bean>

这种配置给我下面的错误。

Caused by: org.quartz.JobPersistenceException:

Couldn't store trigger: The job (DEFAULT.driverJob) referenced by the trigger does not exist.

[See nested exception: org.quartz.JobPersistenceException: The job (DEFAULT.driverJob) referenced by the trigger does not exist.]

我正在使用Spring Framework 2.5.6。我必须升级我的Quartz版本吗?我找不到问题。

谢谢你的帮助。


问题答案:

您的SchedulerFactoryBean也需要注册“ driverJob”。与触发器一起,添加一个jobDetails列表。

<bean id="job.statistics.DailyQPSValidationJobTrigger" class="org.quartz.CronTrigger">
    <property name="name" value="DailyQPSValidationTrigger" />
    <property name="jobName" value="DailyQPSValidation" />
    <property name="jobGroup" value="Statistics" />
    <property name="volatility" value="false" />
    <!-- Each day, 4 o'clock AM -->
    <property name="cronExpression" value="0 0 4 * * ?" />
</bean>

<!-- Scheduler -->

<bean id="job.SchedulerProperties" class="somecompany.someproduct.util.spring.PropertiesFactoryBean"
    scope="singleton">
    <property name="source">
        <props>
            <prop key="org.quartz.scheduler.instanceId">AUTO</prop>
            <prop key="org.quartz.scheduler.instanceName">JobCluster</prop>
            <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop>
            <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop>
            <prop key="org.quartz.jobStore.isClustered">true</prop>
            <prop key="org.quartz.jobStore.useProperties">false</prop>
        </props>
    </property>
</bean>

<bean id="job.Scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" scope="singleton"
    lazy-init="false">
    <property name="startupDelay" value="30" />
    <property name="waitForJobsToCompleteOnShutdown" value="true" />
    <property name="dataSource" ref="jdbc.DataSource" />
    <property name="quartzProperties" ref="job.SchedulerProperties" />
    <property name="jobDetails">
        <list>
            <ref bean="job.statistics.DailyQPSValidationJobDetail" />
        </list>
    </property>
    <property name="triggers">
        <list>
            <ref bean="job.statistics.DailyQPSValidationJobTrigger" />
        </list>
    </property>
    <property name="schedulerListeners">
        <list>
            <bean class="somecompany.someproduct.job.SchedulerErrorListener">
                <property name="monitoringService" ref="monitoring.MonitoringService" />
            </bean>
        </list>
    </property>
    <property name="globalJobListeners">
        <list>
            <bean class="somecompany.someproduct.job.JobErrorListener">
                <property name="name" value="JobErrorListener" />
                <property name="monitoringService" ref="monitoring.MonitoringService" />
            </bean>
        </list>
    </property>
</bean>


 类似资料: