我想用jdk.internal.loader.ClassLoaders$AppClassLoaderspring-boots 代替org.springframework.boot.loader.LaunchedURLClassLoader。但是,我不确定这将如何影响 spring-boot 运行时。
我们最近在java.lang.InstantiationErrorjava 的parallelStream(). 我了解到并行流中的线程正在使用AppClassLoader,因此无法找到驻留在类加载器层次结构中LaunchedURLClassLoader的子级中的应用程序类AppClassLoader。
spring -boot 文档显示您可以在不使用类加载器的情况下运行解压的 spring-boot jar。这很方便地意味着应用程序类也被加载到 中AppClassLoader,从而解决了我们的问题parallelStream()。
$ java -cp BOOT-INF/classes:BOOT-INF/lib/* com.example.MyApplication
Run Code Online (Sandbox Code Playgroud)
注意:这也是 Intellij IDEA 运行 spring-boot 应用程序的方式。
谁知道 spring-boot 类加载器是否所做的不仅仅是启用我应该了解的可执行 jar 和 war 文件。我发现文档不够明确。在生产中不使用 spring-boot 类加载器是否安全?