搜索墙首页  编程技术  java  asp  ajax  php  c/c#/c++  数据库  oracle  mysql  db2  操作系统  windows  linux  股吧
首页 > 编程 > java > Spring
 1         
1楼  bocar 2008-04-24

最近做的一个项目很简单,SSH的组合,所有的配置都用了最简单的配置,比如dataSource、sessionFactory等,需要开发一个定时发送邮件提醒的功能,使用Quartz小菜一碟。
但问题来了,测试时报错: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"也能自动的注入。
2楼  xly_971223 2008-11-05

sh it 果然是autowire惹得祸
耽误了我一下午的时间
 1         
您的发言将按有关规定都会存档,您须为所发表后果负责,请您遵纪守法并注意语言文明。
标题:Quartz的autowire="byName"设置
热门关注
标题回复点击
商业J2EE中间件价值何在?74364
GoogleGuice-比Spring快100倍的IoC容器50322
Hibernate和Spring的决裂以及Spring和EJB3之争48299
关于pojo、dao、service的困惑49298
ThreadLocal与synchronized83287
请教Spring的分布式事务管理44255
spring的事务不起作用?无法和当前sessin绑定?31247
spring+Hibernate中异常如何处理19244
请问这样的细粒度权限能否用acegi实现?47236
用spring的queryForList方法取结果集,字段中含有CLOB怎么办?0226
搜索墙@2009 www.pkwall.com all rights reserved QQ:276471788 [京ICP备09111534号]
声明:本站部分数据来源于网络,仅供参考,如有版权问题,请联系我们,我们将及时删除!转载本站请注明来源