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

标签 java spring-boot tomcat

我有一个带有嵌入式 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/

相关文章:

Java Swing 不工作

java - LDAP。没有身份验证的Spring应用程序

java - Spring 启动: Autowired error

java - 如何在本地机器上为远程tomcat服务器制作一个网络应用程序

从 Oracle DB 加载 Java JTable 数据

java - rxjava2 observable.just(a Boolean) 不是

java - 如何创建跨服务域模型映射?

java - Eclipse环境与部署到tomcat webapps文件夹下文件上传速度差异

java - 全局 Web 应用程序参数

java - 使用 JMS 使用用户名但不使用密码访问 IBM MQ 8