mxcsdn 2010-10-20
将Quartz的JOBDetail,Trigger保持到数据库的时候发现,系统报错
Thejob(DEFAULT.jobDetail)referencedbythetriggerdoesnotexist
经过测试发现,在不使用hibernate的时候只有spring的测试环境情况下一切正常。而放到工作环境的时候就发生错误。
因此怀疑是datasource的问题。查springQuartz论坛上发现果然是这个问题。将quartz的datasource分开独立就全部解决了。其实也可以不独立将quartz的transaction也交给spring一同处理也可以的。
jdbc.propertiesjdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/quartz?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true jdbc.username=root jdbc.password=huawei quartz.jdbc.driver=com.mysql.jdbc.Driver quartz.jdbc.url=jdbc:mysql://127.0.0.1:3306/quartz?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true quartz.jdbc.username=root quartz.jdbc.password=huawei
applicationContext-datasource.xml
<!-- 事务管理器配置, Hibernate单数据源事务 --> <bean id="defaultTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 另一个事务管理器, Jdbc单数据源事务 --> <bean id="quartzTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="quartzDataSource" /> </bean>
applicationContext-quartz.xml
<bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="dataSource" ref="quartzDataSource" /> <property name="applicationContextSchedulerContextKey" value="applicationContext" /> <property name="configLocation" value="classpath:schedule/quartz.properties" /> <property name="autoStartup"> <value>true</value> </property> </bean>