что
Я бы хотел использовать jdk.internal.loader.ClassLoaders$AppClassLoader
вместо пружинных сапог org.springframework.boot.loader.LaunchedURLClassLoader
. Однако я не уверен в том, как это повлияет на время загрузки при загрузке.
почему
Недавно мы столкнулись с java.lang.InstantiationError
при выполнении вызовов репозитория Spring внутри java's parallelStream()
,Я узнал, что потоки в параллельном потоке используют AppClassLoader
и, следовательно, не могут найти классы приложений, находящиеся в LaunchedURLClassLoader
, дочернем элементе AppClassLoader
в иерархии загрузчиков классов.
how
В документации для пружинных загрузчиков показано, что вы можете запускать распакованную банку с пружинными загрузками без использования их загрузчика классов. Это удобно означает, что классы приложений также загружаются в AppClassLoader
, что решает нашу проблему с помощью parallelStream()
.
$ java -cp BOOT-INF/classes:BOOT-INF/lib/* com.example.MyApplication
NB : это также и то, как Intellij IDEA выполняет spring-bootприложения.
вопрос
Кто знает, делает ли загрузчик классов с весенней загрузкой больше, чем включение исполняемых файлов jar и war, о которых я должен знать. Я нашел документацию недостаточно четкой. Безопасно ли не использовать загрузчик классов с весенней загрузкой в производстве?