springboot环境 相同类型强转回自己 ClassCastException

写spring boot 应用时发现一个奇怪的问题。
错误信息大致这样:
java.lang.ClassCastException: com.tysx.monitor.User cannot be cast to com.tysx.monitor.User
类型转换,自己转自己不能转,郁闷了半天。后来
原因是在 pom.xml 配置了热部署机制。


org.springframework.boot
spring-boot-devtools
true

导致jvm发现虽然,虽然类型一致,但是加载它的classloader不是同一个,所以不能转换。
解决办法: 注释掉这个依赖就行了。

根本原因是spring boot为了实现热部署插件,重新实现了classloader .

spring-boot-devtools会检测类路径的变化,当类路径内容发生变化后会自动重启应用程序。Spring Boot的重启技术通过使用两个类加载器。由于使用的是双类加载机制重启会非常快,如果启动较慢也可使用JRebel重加载技术。
(1)base classloader (Base类加载器):加载不改变的Class,如第三方提供的jar包。
(2)restart classloader(Restart类加载器):加载正在开发的Class。
到这里相信大家知道了,为什么重启很快,因为重启的时候只是加载了在开发的Class,没有重新加载第三方的jar包。

你可能感兴趣的:(springboot环境 相同类型强转回自己 ClassCastException)