我正在使用Quartz Scheduler 2.2.2。
我已经在Oracle数据库中创建了一个名为“ SCHEDULER_DEV”的模式。
通过SCHEDULER_DEV默认身份创建用户SCHEDULER_DEV 桌面用户临时桌面空间配额不受用户限制
我在下面为此模式提供了赠款-创建/更改会话,创建表,视图,序列,同义词,类型和过程。
在qrtz_locks表中,我添加了2个条目:
插入QRTZ_LOCKS(SCHED_NAME,LOCK_NAME) VALUES('QuartzScheduler','STATE_ACCESS');
插入QRTZ_LOCKS(SCHED_NAME,LOCK_NAME) VALUES('QuartzScheduler','TRIGGER_ACCESS');
我的web.xml配置如下:
*>
<listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class> </listener> <context-param> <param-name>config-file</param-name> <param-value>quartz.properties</param-value> </context-param> <context-param> <param-name>shutdown-on-unload</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>wait-on-shutdown</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>start-on-load</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>start-delay-seconds</param-name> <param-value>10</param-value> </context-param>*
*
我的crystal.properties文件包括以下内容以及其他键值对:
org.quartz.scheduler.instanceName = QuartzScheduler org.quartz.jobStore.dataSource = SchedulerDS org.quartz.jobStore.tablePrefix = SCHEDULER_DEV.QRTZ_ org.quartz.dataSource.SchedulerDS.jndiURL = jdbc / schedulerds org.quartz.dataSource.SchedulerDS.java.naming.factory.initial = weblogic.jndi.WLInitialContextFactory
运行页面时,出现以下错误:
org.quartz.impl.jdbcjobstore.LockException:无法获取数据库行锁:ORA-00942:表或视图不存在[请参见嵌套 异常:java.sql.SQLSyntaxErrorException:ORA-00942:表或视图 不存在] org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:157) 在 org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:113) 在 org.quartz.impl.jdbcjobstore.JobStoreSupport.doCheckin(JobStoreSupport.java:3270) 在 org.quartz.impl.jdbcjobstore.JobStoreSupport $ ClusterManager.manage(JobStoreSupport.java:3870) 在 org.quartz.impl.jdbcjobstore.JobStoreSupport $ ClusterManager.run(JobStoreSupport.java:3907)
答案 0 :(得分:0)
我的客人问题是您的配置在这里: org.quartz.jobStore.tablePrefix = SCHEDULER_DEV.QRTZ _
尝试更改为:org.quartz.jobStore.tablePrefix = QRTZ_并告诉我是否可行。
P / s:如果您使用其他Oracle模式,请检查您是否对石英表的SCHEDULER_DEV具有授予权限(选择,更新,插入,删除)。
答案 1 :(得分:0)
我也遇到了这个问题,我可以将您指向该类并将调试器放入类 StdRowLockSemaphore 和
ps = conn.prepareStatement(expandedSQL);
ps.setString(1, lockName);
我认为如果您检查锁名称和 SQL,您将能够找出它正在访问哪个表,在我的情况下,我有这些属性 (org.quartz.jobStore.tablePrefix=QRTZ2_)效果是因为我们想用 2+ 的版本来识别它们