最近在做框架封装,类加强后加载到classloader时,发生
interface XXX is not visible from class loader 异常问题。
在eclipse中启动Main时,切正常,但打包或者用spring-boot:run启动时,就出错。
经过长时间摸索,发现是因为项目中的
spring-boot-devtools依赖,导致多个classloader加载。
通过Junittest启动和Application启动项目得到的结果不一样,经排查,程序中调用了isAssignableFrom方法,发现同一个类A.isAssignableFrom(A)返回false,经过debug对比,发现虽然类A看起来是一样,但是通过不同的classloader加载的,一个是AppClassLoader,一个是restartClassLoader, 这样的话,底层便认为是两个不同的类A在比较。
问题解决:restartClassLoader是spring-boot-devtools这个包里面的,只是为了开发时热部署使用,弃用该包后程序运行正常。
不同spring boot启动方式,线程上下文classloader加载问题
猜你喜欢
转载自godlewis.iteye.com/blog/2412449
今日推荐
周排行