gpt4 book ai didi

java - Spring-boot内部jar文件加载顺序? (嵌入式tomcat)

转载 作者:行者123 更新时间:2023-12-05 01:07:01 26 4
gpt4 key购买 nike

我有一个带有嵌入式 tomcat (tomcat-embed-core-8.5.57.jar) 的 spring-boot "fat"jar (1.5.22)。

在 jar 内部 - 在 BOOT-INF/lib 下有许多“内部”jar。

类加载器按什么顺序加载这些内部 jar?

如果我在多台计算机上运行 java -jar myFatSpringBoot.jar - 内部 jar 会以 完全相同 的顺序被拾取,还是 "取决于" 在每台计算机上的某些东西上? (FS/tmpfs/java/等)


更新:许多响应者表示它会按照它们在 fat jar 中出现的确切顺序来使用内 jar (因此至少 QA 和 PROD 对于同一个 fat jar 的行为应该相同,不像它用于非 spring-boot .war 应用程序)。

现在我想知道在创建/打包 jar 的过程中,我们是否有任何机制来保留/强制执行/指定内 jar 的顺序? (maven/gradle/...)

最佳答案

BOOT-INF/lib 中的 jar 是 always added to Spring Boot’s class loader in the order in which they appear in the jar 。这意味着,如果您在多个 jar 中声明了相同的类文件或资源,则无论操作系统、Java 版本等如何,相同的文件或资源总是会在应用程序的多次运行中获胜。即使您使用的是 Spring,这也是如此Boot 在运行时对 automatically unpacking certain jars 的支持。

Spring Boot 还在它构建的每个 jar 中打包一个 BOOT-INF/classpath.idx index file。它“按照它们应该添加到类路径的顺序”列出了所有嵌套的 jar。如果你解压 jar 文件,使得 BOOT-INF/lib 中的 jars 按文件系统排序,如果你继续使用 Spring Boot 的 JarLauncher 启动应用程序 it will honour the order in the index .

Spring Boot 包含测试 such as these ,在使用 java -jar 启动应用程序和使用 java org.springframework.boot.loader.JarLauncher 时验证类路径的顺序.

关于java - Spring-boot内部jar文件加载顺序? (嵌入式tomcat),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67997151/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com