zoukankan      html  css  js  c++  java
  • 在SpringBoot中使用动态加载Class报ClassNotFoundException的问题

    在SpringBoot中使用BeanUtils.forName(clazzName, classLoader)根据配置文件制定的类动态加载class,开发阶段在IDEA中运行没有任何问题,但是构建之后以jar包方式启动就死活无法启动了,错误提示找不到要加载的类,反复确认类实际上是存在的,所以一番查阅尝试后得知,是由于我错误的使用了ClassLoader.getSystemClassLoader()导致的问题。

    打包后的springbootjar包中实际上包含了所有的第三方依赖包,所以是一个包含jar包的jar包,而java默认的Launcher.AppClassLoader无法加载这种jar in jar的jar包,所以springboot使用的是LaunchedURLClassLoader来加载类,而ClassLoader.getSystemClassLoader()返回的是系统(应用)类加载器-即AppClassLoader,自然找不到被打包到BOOT-INF/lib/xx.jar里面的class文件,所以换成Xx.class.getClassLoader()或者Spring提供的ClassUtils.getDefaultClassLoader()。

  • 相关阅读:
    第33周二
    第33周一
    第32周日
    第32周六
    RichTextBox 右键显示 ContextMenuTrip
    关于 Head First SQL 中文版
    linux进程通信之共享内存
    chroot 与 jail
    SQL基础--> 约束(CONSTRAINT)
    MessageDigest简单介绍
  • 原文地址:https://www.cnblogs.com/famary/p/14718994.html
Copyright © 2011-2022 走看看