ClassNotFoundException when Using CronTrigger and MySQL to do scheduler

不想你离开。 提交于 2021-01-28 11:44:00

问题


java.lang.ClassNotFoundException when Using CronTrigger and MySQL to do scheduler in Java

I am currently developing a project that require scheduler to download data from MySQL database from a server and put it into a text file stored in a fixed directory. I am using CronTrigger and scheduler to accomplish this task and my project will be reside in Tomcat version 6.0/webapps directory. However, i encountered this problem when i run my program.

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>

I am sure that my java code is not the problem because this error does not occur all the time. However, it has a 30% occurance rate which is quite high. However, i am not sure whether my quartz file is written correctly. Below is the quartz file written.

Configure Main Scheduler Properties ##

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

Configure ThreadPool

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

Configure 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_

Configure Datasources

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 = root
org.quartz.dataSource.myDS.password = password
org.quartz.dataSource.myDS.maxConnections 5

Can anyone help me with this problem? If you would like to have more information please do post, I will provide it as soon as possible.


回答1:


Classloader complains about class bgoc.dwgScheduler.dwg_QuartzAutoDownloadJob missing.

Is this class yours? Have you checked if this class is on the classpath ?

Maybe this class is not necessary, but some other class or configuration may be importing it.




回答2:


I had the same situation. This was caused because I removed a previously used job, during a version release. I did not count for a few triggers (not cron, but simple delayed ones) staying in the DB. Those tried to execute but failed because their job was removed already.

What I ended up doing is putting the job back with empty execute method body (logging the fact it was called).

This way, after deploying the version with the empty method, the triggers can fire with no problem, quartz won't whine about that. In the next version you can then remove the empty job too.

Deleting manually from the quartz tables is risky and generally not advisable. You probably don't know what row(s) belong to job triggers/jobs.



来源:https://stackoverflow.com/questions/17480452/classnotfoundexception-when-using-crontrigger-and-mysql-to-do-scheduler

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!