首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClassNotFoundException使用CronTrigger和MySQL执行调度程序

ClassNotFoundException使用CronTrigger和MySQL执行调度程序
EN

Stack Overflow用户
提问于 2013-07-05 02:56:08
回答 2查看 5.6K关注 0票数 1

java.lang.ClassNotFoundException使用CronTrigger和MySQL在Java中执行调度程序

我目前正在开发一个项目,该项目需要调度程序从服务器下载MySQL数据库中的数据,并将其放入存储在固定目录中的文本文件中。我正在使用CronTrigger和调度器来完成这个任务,我的项目将驻留在TomcatVersion6.0/webapp目录中。但是,我在运行程序时遇到了这个问题。

代码语言:javascript
复制
Jul 5, 2013 3:10:00 PM org.quartz.impl.jdbcjobstore.JobStoreSupport triggerFired
SEVERE: Error retrieving job, setting trigger state to ERROR.
org.quartz.JobPersistenceException: Couldn't retrieve job because a required class was not found: bgoc.dwgScheduler.dwg_QuartzAutoDownloadJob [See nested exception: java.lang.ClassNotFoundException: bgoc.dwgScheduler.dwg_QuartzAutoDownloadJob]**<br>

at org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveJob(JobStoreSupport.java:1328)<br>
at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggerFired(JobStoreSupport.java:2789)<br>
at org.quartz.impl.jdbcjobstore.JobStoreSupport$37.execute(JobStoreSupport.java:2757)<br>
at org.quartz.impl.jdbcjobstore.JobStoreSupport.executeInNonManagedTXLock(JobStoreSupport.java:3662)<br>
at org.quartz.impl.jdbcjobstore.JobStoreSupport.triggerFired(JobStoreSupport.java:2751)<br>
at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:313)<br>
Caused by: java.lang.ClassNotFoundException: bgoc.dwgScheduler.dwg_QuartzAutoDownloadJob <br>
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)<br>
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)<br>
at org.quartz.simpl.InitThreadContextClassLoadHelper.loadClass(InitThreadContextClassLoadHelper.java:74)<br>
at org.quartz.simpl.CascadingClassLoadHelper.loadClass(CascadingClassLoadHelper.java:118)<br>
at org.quartz.impl.jdbcjobstore.StdJDBCDelegate.selectJobDetail(StdJDBCDelegate.java:897)<br>
at org.quartz.impl.jdbcjobstore.JobStoreSupport.retrieveJob(JobStoreSupport.java:1316)<br>

我确信我的java代码不是问题,因为这个错误并不总是发生。但其发生率较高,为30%。但是,我不确定我的石英文件写得是否正确。下面是所写的石英文件。

配置主调度器属性

org.quartz.scheduler.instanceName = DefaultQuartzScheduler org.quartz.scheduler.instanceId =1

配置ThreadPool

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount =5 org.quartz.threadPool.threadPriority =4

配置JobStore

org.quartz.jobStore.misfireThreshold = 5000 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.dataSource = myDS org.quartz.jobStore.tablePrefix = QRTZ_

配置数据源

org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3307/QRTZ_BIS org.quartz.dataSource.myDS.user =根 org.quartz.dataSource.myDS.password =密码 org.quartz.dataSource.myDS.maxConnections 5

有人能帮我解决这个问题吗?如果你想得到更多的信息,请做帖子,我会尽快提供它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-05 03:07:31

类加载程序抱怨类bgoc.dwgScheduler.dwg_QuartzAutoDownloadJob丢失。

这门课是你的吗?你检查过这个类是否在类路径上了吗?

也许这个类是不必要的,但是其他类或配置可能正在导入它。

票数 1
EN

Stack Overflow用户

发布于 2018-07-05 12:55:03

我也有过同样的情况。这是因为在版本发布期间,我删除了以前使用过的作业。我没有计算几个触发器(不是cron,而是简单的延迟触发器)留在DB中。这些程序试图执行,但失败了,因为它们的任务已经被移除。

我最后所做的是将作业放回空的execute方法主体(记录它被调用的事实)。

这样,在使用空方法部署版本之后,触发器就可以毫无问题地触发,石英不会对此发牢骚。在下一个版本中,您也可以删除空作业。

手动从石英表中删除是有风险的,通常不可取。您可能不知道哪些行属于作业触发器/作业。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17480452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档