我正在使用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>