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加载顺序是为啥呢,原来的按照字母顺序多么清晰明了。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。
相关推荐
-
Spring Boot打包war jar 部署tomcat
概述 1.Spring Boot聚合工程打包war部署Tomcat 2.Spring Boot打包Jar,通过Java -jar直接运行. 3.提供完整pom.xml测试项目 至github 解决问题 1.xxxx中没有主清单属性 2.解决没有web.xml而报错 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project provider: E
-
tomcat加载jar异常问题的分析与解决
现象描述: 项目使用springboot启动一个web项目,在启动阶段看到console中出现了异常"1.10.3-1.4.3\hdf5.jar 系统找不到指定的文件",虽然这些异常不影响项目的正常运行,但作为一个严谨的技术人员,看到这些异常就像见到仇人一样,一定要除之而后快. java.io.FileNotFoundException: D:\.m2\repository\org\bytedeco\javacpp-presets\hdf5-platform\1.10.3-1.4.3
-
tomcat8改了jar加载顺序的踩坑记录
记录一次调试经历 起因 相同的jar,服务器正常而本地起的项目一直报下图中的错. 解释 首先,这段代码是hibernate执行有参数的hql的过程中报错的,最上面那层,对string进行强转导致的. 看hql及java对象,发现,参数为string,而参数对应的java对象中的字段类型是BigDcimal.猜测可能是问题出现的原因,但相关的代码没有找到,继续看代码.调试 堆栈信息中 bind()方法的作用(和报错有关的),从 中获取type和value,对value进行强转,其中type是在设置
-
java 如何查看jar包加载顺序
目录 查看jar包加载顺序 查看具体的class从哪个jar保重加载的 jar包中类的加载顺序(类名冲突) javac是用来编译*.java文件的 在windows下,多个jar包用分号隔开 查看jar包加载顺序 查看具体的class从哪个jar保重加载的 在JVM启动时,加上如下参数: -verbose:class 然后哦就会有如下输出 [Loaded java.util.regex.Pattern from /Library/Java/JavaVirtualMachines/jdk1.7.0
-
web.xml中servlet, bean, filter, listenr 加载顺序_动力节点Java学院整理
web.xml 文件中一般包括 servlet, spring, filter, listenr的配置.那么他们是按照一个什么顺序加载呢?加载顺序会影响对spring bean 的调用. 比如filter需要用到 bean ,但是加载顺序是 先加载filter 后加载spring,则filter中初始化操作中的bean为null:首先可以肯定 加载顺序与他们在web.xml 文件中的先后顺序无关. web.xml 中 listener 和 serverlet 的加载顺序为 先 listener
-
详解Spring Boot 配置加载顺序及属性加载顺序
先给大家介绍下spring boot 配置加载顺序,具体内容如下所示: 使用 Spring Boot 会涉及到各种各样的配置,如开发.测试.线上就至少 3 套配置信息了.Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发.测试.线上环境使用不同的配置. 在 Spring Boot 里面,可以使用以下几种方式来加载配置.本章内容基于 Spring Boot 2.0 进行详解. 1.properties文件: 2.YAML文件: 3.系统环境变量: 4.命令行参数: 等等-- 我们可
-
SpringBoot内部外部配置文件加载顺序解析
内部配置加载顺序 SpringBoot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件 –file:./config/ –file:./ –classpath:/config/ –classpath:/ 优先级由高到底,高优先级的配置会覆盖低优先级的配置: SpringBoot会从这四个位置全部加载主配置文件:互补配置:还可以通过spring.config.location来改变默认的配置文件位置 项
-
JAVA Web.xml加载顺序过程详解
web.xml加载过程(步骤): 1.启动WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param> 2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文. 3.容器将<context-param></context-param>转化为键值对,
-
浅谈springboot一个service内组件的加载顺序
springboot service内组件加载顺序 先加载自身构造器,所以在构造器中初始化时若使用需要注入的(即@Autowired注解的)组件相关的方法,则会报null: 然后加载注入的组件即@Autowired 最后加载@PostConstruct注解的方法,在该方法内可以使用注入的组件. 一个service初始化的一些操作根据不同情况可以选择在不同的地方进行初始化 Spring boot 配置文件 加载顺序 springboot 启动会扫描以下位置的application.properti
-
springboot中的静态资源加载顺序优先级
目录 springboot静态资源加载顺序优先级 看springboot源码里面 springboot静态资源加载规则 一.静态资源映射规则 1.webjars 2.springboot内置默认访问路径 3.首页处理 4.网站图标 springboot静态资源加载顺序优先级 看springboot源码里面 springboot静态资源加载规则 我们经常会使用springboot创建web应用,在springboot中金静态资源是如何存放的呢? 一.静态资源映射规则 我们先创建一个springbo
-
Springboot常用注解及配置文件加载顺序详解
Springboot常用注解及底层实现 1.@SpringBootApplication:这个注解标识了一个SpringBoot工程,她实际上是另外三个注解的组合,分别是: @SpringBootConfiguration:源码可以看到,这个注解除了元注解外,实际就只有一个@Configuration,把该类变成一个配置类,表示启动类也是一个配置类: @EnableAutoConfiguration:是开启自动配置的功能,向Spring容器中导入了一个Selector,用来加载ClassPath
-
浅谈Vue的加载顺序探讨
在Vuejs 1.0版本中,如果父子组件进行配合,它们的生命周期执行具有如下特点: 1. created总是先父后子 生命周期函数created总是按照从父到子的顺序依次执行,但是兄弟之间没有严格按照这样的顺序执行,估计是采用了异步函数,不仅如此,子组件在父组件中的插入顺序也是随机的,并没有什么特别的规律.假定子组件的引用顺序如下: <div class="container"> <child-c1 v-ref:child1></child-c1>
随机推荐
- DNS的工作原理图解说明
- Docker Dockerfile的使用实例
- jsp分页显示完整实例
- AngularJS点击添加样式、点击变色设置的实例代码
- 易语言基础教程之简单代码的编写
- iOS像素对齐概念解析
- 在Mac OS上搭建PHP的Yii框架及相关测试环境
- go语言获取系统盘符的方法
- C#封装的常用文件操作类实例
- 推荐几本Android程序员必读书籍
- jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
- MongoDB学习之Text Search文本搜索功能
- jquery toggle faq 春江花月夜版
- 深入HRESULT与Windows Error Codes的区别详解
- PHP类的特性实例分析
- 修正IE下使用CSS属性overflow的bug
- 服务器托管 火爆机遇减轻建站负担
- 解决vue-router中的query动态传参问题
- JavaScript DOM元素常见操作详解【添加、删除、修改等】
- mysql的定时任务实例教程