quartz 报错:java.lang.classNotFoundException

最近在做一个调度平台改造的项目,quartz在测试环境跑的是单机环境,生产上两台服务器做集群。

测试环境是ok的,生产上线后报错,一个类java.lang.classNotFoundException(注明:这个类被别人修改了名称,现在使用的新名字)

第一次:失败

从代码上排除了对旧的job类的引用(配置文件和类都排除了)

推测是服务器缓存了该类。

尝试:

清除缓存,重启服务器,仍然报上述错误。

第二次:失败

将生产上的配置拉到测试环境上,反复测试,重启服务器时会自动清除缓存。

推测是quartz的那个类为全局变量,在生产上会做同步。

尝试:

在测试环境上再次搭建一台调度服务器,从生产上将配置和执行全部拉到测试环境上,执行ok

反复调试,仍然没有发现同步的迹象。

没有重现生产上的异常,不敢上线了。

第三次:成功

那么这个旧的job类究竟从哪里调用的?找不到头绪!会不会保存到数据库吧?

当时觉得这个想法很搞笑,从设计的角度上来说,quartz应该不允许将别的类引入到自己的体系吧。

但也没路可走,就查看数据库,看看有没有保存在数据库中。你猜对了,它对原原本本的躺在数据库的表中:

CREATE TABLE QRTZ_JOB_DETAILS(
JOB_NAME VARCHAR(200) NOT NULL,
JOB_GROUP VARCHAR(200) NOT NULL,
DESCRIPTION VARCHAR(250) NULL,
JOB_CLASS_NAME VARCHAR(250) NOT NULL,
IS_DURABLE VARCHAR(1) NOT NULL,
IS_VOLATILE VARCHAR(1) NOT NULL,
IS_STATEFUL VARCHAR(1) NOT NULL,
REQUESTS_RECOVERY VARCHAR(1) NOT NULL,
JOB_DATA BLOB NULL,
PRIMARY KEY (JOB_NAME,JOB_GROUP))
TYPE=InnoDB;

好吧! 查看该字段,发现确实是旧的类,被不是新的类。

那么为什么在测试环境中发现呢?

进入测试库,也没有发现旧的类,好吧。

旧项目果然是坑,我就直愣愣的掉进去了。

结论:

计算机是个理性的东西,故一切皆有可能,即便是最不可能的事情也要去一一确认。在查找问题时最好想清楚所有发生故障的可能,然后一一排除,直到找到最终的问题。

对web开发来说,解决此类问题的一般思路如下:

1,从全局的角度来看,应用程序,缓存,数据库是三大独立模块,这些部分都有可能发生异常,应该首先排查应用程序本身的异常(这个概率最大);其次是缓存(同步)模块排查;最后是数据库模块排查。

2,全局确定好的前提下,细分上述的模块,将可能出现的问题一一列出。

3,动手,验证想法。对一个好的开发者来说,动手只是验证的手段,思路才是最重要的。

时间: 2024-10-18 08:59:41

quartz 报错:java.lang.classNotFoundException的相关文章

maven web 项目中启动报错java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener

本篇文章主要介绍了"maven web 项目中启动报错java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener ",主要涉及到maven web 项目中启动报错java.lang.ClassNotFoundException: org.springframework.web.util.Log4jConfigListener 方面的内容,对于maven web 项目中启动报错jav

eclipse下执行wordcount报错 java.lang.ClassNotFoundException 解决办法

eclipse下执行wordcount报错 java.lang.ClassNotFoundException 17/08/29 07:52:54 INFO Configuration.deprecation: fs.default.name is deprecated. Instead, use fs.defaultFS 17/08/29 07:52:54 WARN util.NativeCodeLoader: Unable to load native-hadoop library for y

MyEclipse2014报错java.lang.ClassNotFoundException

MyEclipse2014做web开发的时候,总是报错java.lang.ClassNotFoundException.而对应的类有能在包中找到.原因一般是由下面情况引起的. 在开发的时候,我们习惯性的在lib下面根据包类型或作用分文件夹来管理,然后手动将包导入到项目中(此时包会在Referenced Libraries中),而MyEclipse2014只会自动加载Web app Libraries文件夹中的包. 解决办法就是,将所有的支撑包都放到lib目录下,而不要在lib目录下分文件夹管理.

jdbc连接sqlserver报错java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver

使用2008的数据库, 我已经引入的sqljdbc4的包,单还是报这个错,很奇怪突然想到在配置hibernate的时候,是拷贝下来的代码 然后到网上查了下, 因为是2008的版本驱动和2000的有点不同, 之前的都是可能是2000或者2005的class是com.microsoft.jdbc.sqlserver.SQLServerDriver 可是2008  去是com.microsoft.sqlserver.jdbc.SQLServerDriver 就这么改过来就可以了 jdbc连接sqlse

项目报错java.lang.ClassNotFoundException: org.common.SessionListener

现象:项目报错java.lang.ClassNotFoundException: org.common.SessionListener,并且myeclipse左侧Package Explorer中项目目录的WEB-INF下显示多了个classes文件夹.既然报错是ClassNotFoundException,就去tomcat的WEB-INF/classes下找该项目,的确没有class文件. 解决方法:右击项目,点击properties(或者右击项目,选择build path--config b

运行hadoop的Wordcount程序报错java.lang.ClassNotFoundException: WordCount$TokenizerMapper

在运行hadoop的官方Wordcount程序时报错 java.lang.ClassNotFoundException: WordCount$TokenizerMapper 提示信息为找不到TokenizerMapper类,但程序师官方的,应该没错. 打包到Linux上可以运行,确定不是程序的错. 然后在网上搜索一番,看到有人说可能是eclipse版本原因,试了一下就ok了 使用的eclipse版本是3.5.1. 遇到此问题的兄弟们可以试一下

【web.xml】报错java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

今天搭建新的项目,虽然在web.xml中配置了ContextLoaderListener以及IntrospectorCleanupListener 如下: web.xml中部分代码: 1 <!-- 监听servletContext,启动contextConfigLocation中的spring配置信息 --> 2 <listener> 3 <listener-class>org.springframework.web.context.ContextLoaderListe

MapReduce 程序运行报错 java.lang.ClassNotFoundException解决方法

在创建自定义的Mapper时候,编译正确,但上传到集群执行时出现错误: 11/16/05 22:53:16 INFO mapred.JobClient: Task Id : attempt_201111301626_0015_m_000000_0, Status : FAILED java.lang.RuntimeException: java.lang.ClassNotFoundException: actiondemo.MyJob$MapClass at org.apache.Hadoop.

spark取得lzo压缩文件报错 java.lang.ClassNotFoundException

恩,这个问题,反正是我从来没有注意的问题,但今天还是写出来吧 配置信息 hadoop core-site.xml配置 <property>    <name>io.compression.codecs</name>         <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,com.hadoop.compression.lz

maven创建spring项目之后,启动报错java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener

出错情景:maven中已经加载了spring的核心包,但是项目启动时,报错: org.apache.catalina.core.StandardContext listenerStart严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderListenerjava.lang.ClassNotFoundException: org.springframewor