打破双亲委派机制的自定义类加载器

1.场景

  mybatis的插件去做切换数据源 数据源存放在map中 mybatis的插件去map拿数据,发现数据丢失

2.springboot为了热加载自定义的 RestartClassLoader 打破了双亲委派机制

  在加载自定义的类(自定义路径的类)时会调用RestartClassLoader对类进行加载,在引用的包,如spring等基础maven包中的类时,会调用AppClassLoader进行类加载与加载过对象的数据存储。且因为RestartClassLoader是自定义的类加载器,打破了双亲委派机制,导致RestartClassLoader中加载过的对象和数据在AppClassLoader中不能获取到。使得在debug时,自定义类中的对象以及数据和引用包的对象以及数据不一致(public static final 的属性/数据被多次/两次加载)。

 导致 AppClassLoader不能获取到RestartClassLoader已经加载过的对象及数据,需要重新进行加载

3.解决

  排除spring-devtools包

posted @ 2022-06-24 10:18  重生之我是java程序员  阅读(307)  评论(0编辑  收藏  举报