最近在做一个调度平台改造的项目,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;

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

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

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

第四次:成功

再次部署到生产上,还是报错:类找不到。

确认问题处在数据库中,我对quartz的表一张张的查找,仍然找不到这个记录,那就从写入库开始入手,查了quartz的代码,发现job_detail表中有个字段job_data,它的类型是blob,会不会存在这里呢?

确实,可以打开此blob查看,数据时放到这里了。

这个小心一些,再次检查是否有别的blob字段存放旧的job类,发现在triggers表中也有个字段job_data,至此问题发现了。可怎么解决呢?blob类型的数据不能直接通过update来执行,毕竟要考虑到编码的因素,拿就釜底抽薪,直接将类重构为以前的类。

从这次经历来看,旧项目果然是坑,我就直愣愣的掉进去了。

结论:

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

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

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

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

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

转载于:https://www.cnblogs.com/davidwang456/p/4272530.html

quartz 报错:java.lang.classNotFoundException相关推荐

  1. 首次使用eclipes运行项目报错“Java.lang.ClassNotFoundException”

    首次使用eclipes运行项目报错"Java.lang.ClassNotFoundException" 运行项目时提示: 解决方法: 1.点击菜单-Project-Build Au ...

  2. hbase启动的时候报错java.lang.ClassNotFoundException: org.slf4j.LoggerFactory

    启动hbase的时候报错: master running as process 15806. Stop it first. Desktop: regionserver running as proce ...

  3. pyspark报错java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver

    完整报错如下: Traceback (most recent call last):File "<stdin>", line 6, in <module>F ...

  4. maven项目 报错 java.lang.ClassNotFoundException: org.springframework.web.filter.HiddenHttpMethodFilter

    报错信息如下: 严重: Exception starting filter hiddenHttpMethodFilter java.lang.ClassNotFoundException: org.s ...

  5. IDEA的Struts2项目报错java.lang.ClassNotFoundException

    程序报错: java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecute ...

  6. Spring Cloud Feign 启动报错 java.lang.ClassNotFoundException: org.springframework.cloud.client.loadbalan

    问题描述:在Spring Cloud项目中引入了feign后启动项目,项目会报错:java.lang.ClassNotFoundException: org.springframework.cloud ...

  7. 关于阿里云OSS报错-java.lang.ClassNotFoundException: org.jdom.input.JDOMParseException

    报错信息:org.springframework.web.util.NestedServletException: Handler processing failed; nested exceptio ...

  8. 报错java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher解决方案

    一. 测试类 public static void main(String[] args) {String str="{\"value\":\"我是测试valu ...

  9. android 接入qq分享能力报错: java.lang.ClassNotFoundException: com.tencent.stat.StatConfig

    解决办法 在接入QQ分享的时候, 包含了open_sdk_rxxx_lite.jar, 下载地址. 在初始化的时候报了一个异常,: java.lang.ClassNotFoundException: ...

  10. java(优化15) 报错java.lang.ClassNotFoundException: net.sf.ezmorph.Morpher解决方案

    一. 测试类 public static void main(String[] args) {String str="{\"value\":\"我是测试valu ...

最新文章

  1. 详解BLE 空中包格式—兼BLE Link layer协议解析
  2. Android Handler 异步消息处理机制的妙用 创建强大的图片载入类
  3. SAP PM 初级系列13 - PM Revision
  4. 【算法系列】一道面试算法题
  5. flutter项目如何打包(android)
  6. java mvc 面试题_2018年java技术面试题整理
  7. C++vector相关学习,我的理解
  8. wordpresd免登录发布接口php_屏蔽修改wp-login.php登录入口确保WordPress网站后台安全...
  9. 2018北大计算机复试线,2018年北京大学考研复试分数线已公布
  10. java webpack web项目_零基础如何学习web前端,入门教程分享
  11. Spring boot 内部服务调用 (FeignClient)
  12. Linux开机自动启动ORACLE设置
  13. C# datagridview 实现按指定某列或多列进行排序
  14. gin上传文件服务器,gin-上传文件
  15. #考研笔记#计算机之word问题
  16. 推荐10款适合C/C++开发人员的IDE
  17. 完整的计算机系统由硬件系统和应用程序组成,一个完整的计算机系统由哪两部分组成?各部分的功能主要是什么?...
  18. 百度竞价广告的URL设置
  19. jquery 漂浮广告
  20. 【科学文献计量】中英文文献标题及摘要分词字数与频数统计与可视化

热门文章

  1. python回归分析预测模型_Python与线性回归模型预测房价
  2. 全国计算机等级考试培训方案,第23次全国计算机等级考试培训安排.doc
  3. 如何用python爬虫薅羊毛_不会Python编程也能用的,薅羊毛软件使用说明
  4. h2 不能访问localhost_SpringBoot2.x系列教程44--H2数据库详解及搭建Web控制台
  5. flex 平铺布局_CSS3 Flex布局(伸缩布局盒模型)学习
  6. python背景颜色词云图_python中实现词云图
  7. cmpp3.0协议 java,JAVA CMPP3.0协议实现
  8. 发送结构化的网络消息
  9. 一次性定时事件的处理
  10. php导出excel2007实例,PHPExcel精简版与导入导出案例