浏览 4196 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-24
但问题来了,测试时报错:org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: Table 'chem.qrtz_locks' doesn't exist [See nested exception: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'chem.qrtz_locks' doesn't exist] 在论坛里搜索了一下。 有人说: 引用 因为这个时候你的quartz是jobstore用的HDBCJobStore模式,此时会从数据库查询任务。
你如果只是测试的话,可以在你的classpath下加一个文件quartz.properties,并且加上一句org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore 。就会采取内存存储的模式了。 但是我查看了Quartz包中的默认quartz.properties文件,org.quartz.jobStore.class的属性已经是org.quartz.simpl.RAMJobStore,除非你要改成HDBCJobStore的模式才需要重新设置。 还有人说: 引用 另外可能是自动装配惹得祸,存在dataSource这个bean就自动用数据库的状态维持了。
这句话讲到了点子上。我在配置文件中为了注入的方便都使用了default-autowire="byName" ,而Quartz在启动时如果发现了"dataSource"会自动注入变成HDBCJobStore的模式,那么我删掉Quartz配置文件<beans />中的default-autowire="byName"。果然程序顺利运行,Quartz也能正常定时启动。 但是这样Quartz配置文件中的注入关系都要明文手动注入了,小的项目到无所谓,大点的项目就麻烦了。何不在"dataSource"的名称上做文章呢? 于是将"dataSource"改成"myDataSource",Quartz配置文件<beans />中依然使用 default-autowire="byName"。OK!程序正常启动,Quartz正确定时启动,而且autowire="byName"也能自动的注入。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-05
sh it 果然是autowire惹得祸
耽误了我一下午的时间 |
|
返回顶楼 | |