什么
我想使用jdk.internal.loader.ClassLoaders$AppClassLoader
而不是弹簧靴org.springframework.boot.loader.LaunchedURLClassLoader
。但是,我不确定这将如何影响spring-boot运行时。
为什么
我们最近在Java的java.lang.InstantiationError
中进行Spring存储库调用时遇到了parallelStream()
。我了解到并行流中的线程正在使用AppClassLoader
,因此无法找到位于类加载器层次结构中LaunchedURLClassLoader
的子级AppClassLoader
中的应用程序类。
如何
spring-boot documentation显示您可以运行未包装的spring-boot jar,而无需使用其类加载器。这很方便,这意味着应用程序类也已加载到AppClassLoader
中,从而解决了parallelStream()
的问题。
$ java -cp BOOT-INF/classes:BOOT-INF/lib/* com.example.MyApplication
NB :这也是Intellij IDEA运行弹簧启动应用程序的方式。
问题
除了启用我应该了解的可执行jar和war文件之外,谁知道spring-boot类加载器是否在做更多的事情。我发现文档不够明确。在生产环境中不使用spring-boot类加载器是否安全?