千家信息网

tomcat8改了jar加载顺序的踩坑记录

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,记录一次调试经历起因相同的jar,服务器正常而本地起的项目一直报下图中的错。解释首先,这段代码是hibernate执行有参数的hql的过程中报错的,最上面那层,对string进行强转导致的。看hql及
千家信息网最后更新 2026年11月01日tomcat8改了jar加载顺序的踩坑记录

记录一次调试经历

起因

相同的jar,服务器正常而本地起的项目一直报下图中的错。

解释

首先,这段代码是hibernate执行有参数的hql的过程中报错的,最上面那层,对string进行强转导致的。

看hql及java对象,发现,参数为string,而参数对应的java对象中的字段类型是BigDcimal。猜测可能是问题出现的原因,但相关的代码没有找到,继续看代码、调试

堆栈信息中 bind()方法的作用(和报错有关的),从 中获取type和value,对value进行强转,其中type是在设置参数阶段设置的,如下图,先根据映射关系找对应的java对象中的类型,找不到采用value.getclass();

org.hibernate.impl.AbstractQueryImpl中,


中间结论

我本地没问题,代码就是那么写的,报错是应该的,那服务器是怎么跑通的?

继续

趁早上没人,远程调试下服务器项目,过程中,想到是否有人重写了hibernate的源码导致的,搜一下,果然。。。

hibernate源码

重写的代码,修改了下,保证了对参数是string的兼容。

联想一下,tomcat的jar包加载顺序从8起发生了改变,不再像之前按照字母顺序,先加载的生效。而8之后,该用别的方式,该方式导致不同操作系统结果不同,虽然两者都用的8,而我是mac,它是linux。。。当时看到那篇博客就觉得有坑,没想到坑来的这么快。

至于不同操作系统具体的加载方式,需要看tomcat源码,还没看~~~

结论

由于生效的class不同,导致本地和服务器的结果不同,不想看源码的话,可以先把hibernate的重复类删掉;应该是可以对源码进行修改,比如改成按照字母顺序

不得不吐槽下,tomcat改jar加载顺序是为啥呢,原来的按照字母顺序多么清晰明了。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

顺序 不同 代码 参数 源码 服务器 服务 字母 对象 方式 操作系统 内容 就是 类型 系统 结果 结论 过程 问题 项目 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 鸠鸠互联网科技 科技与互联网发展 猪兼强互联网科技 互联网科技上市公司 狮子座互联网科技培训 成都狮子座互联网科技 互联网科技公司做什么 卓越科技互联网 招聘 无锡溥仪互联网科技有限公司 中盈科技互联网信息有限公司 中国的互联网科技企业的崛起 新兴科技互联网创新大赛颁奖典礼 深圳育鹏互联网科技有限公司招聘 西安小鹰速贷互联网科技有限公司 长沙互联网科技 广州富喜互联网络科技 互联网与数字科技关系 陕西彩京云互联网科技有限公司 上海旺乐尼互联网科技有限公司 广州全民伙伴互联网科技有限公司 科技互联网产品 智能科技公司是互联网公司吗 互联网 科技创新 天津摩尔互联网科技 互联网科技教育视频 湖北码尼互联网科技有限公司电话 互联网第三次科技革命特征 智帮互联网科技公司最近动向 互联网科技博主张洲 上海互联网科技园景观
0