欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺析Spring Boot中的spring-boot-load模塊

 更新時間:2018年01月26日 11:18:21   作者:并發(fā)編程網(wǎng) - ifeve.com  
spring-boot-loader模塊允許我們使用java -jar archive.jar運行包含嵌套依賴jar的jar或者war文件,它提供了三種類啟動器。下面通過本文給大家介紹spring-boot-load模塊的相關知識,感興趣的朋友一起看看吧

一、前言

正常情況下classloader只能找到jar里面當前目錄或者文件類里面的*.class文件。為了能夠加載嵌套jar里面的資源之前都是把嵌套jar里面的class文件和應用的class文件打包為一個jar,這樣就不存在嵌套jar了,但是這樣做就不能很清晰的知道應用到底依賴了哪些東西,哪些是應用自己的,另外多個jar里面的class可能內(nèi)容不一樣但是文件名卻一樣。springboot中spring-boot-loader就是為優(yōu)雅解決這個問題而誕生的。

spring-boot-loader模塊允許我們使用java -jar archive.jar運行包含嵌套依賴jar的jar或者war文件,它提供了三種類啟動器 (JarLauncher, WarLauncher and PropertiesLauncher),這些類啟動器的目的一樣都是為了能夠加載嵌套在jar里面的資源(比如class文件,配置文件等)。[Jar|War]Launcher固定去查找當前jar的lib目錄里面的嵌套jar文件里面的資源。

二、spring-boot-loader模塊提供的jar目錄結構

Springboot中jar文件格式固定如下:

archive.jar
 |
 +-META-INF(1)
 | +-MANIFEST.MF
 +-org(2)
 | +-springframework
 | +-boot
 | +-loader
 |  +-<spring boot loader classes>
 +-com(3)
 | +-mycompany
 | + project
 | +-YouClasses.class
 +-lib(4)
 +-dependency1.jar
 +-dependency2.jar
  • 結構(1)jar文件中MANIFEST.MF文件存放處
  • 結構(2) Spring-boot-loader本身需要的class放置處
  • 結構(3) 應用本身的文件放置處
  • 結構(4)應用依賴的jar固定放到lib目錄。

那么spring-boot是如何去按照這個結構加載資源那?

  • 首先在打包時候會使用spring-boot-maven-plugin插件重寫打成的jar文件,會設置META-INF/MANIFEST.MF中的
Main-Class: org.springframework.boot.loader.JarLauncher 
Start-Class: com.mycompany.project.MyApplication

并拷貝spring-boot-loader包里面的class文件到結構(2),應用依賴拷貝到(4)應用類拷貝到(3)

  • 通過java -jar archive.jar 運行時候Launcher會去加載JarLauncher類并執(zhí)行其中的main函數(shù),JarLauncher主要關心構造一個合適的URLClassLoader加載器用來調(diào)用我們應用程序(MyApplication)的main方法。

三、spring-boot-maven-plugin插件打包流程分析

 

注:這里需要思考下為何要拷貝本來應該放入到lib里面的spring-boot-loader.jar里面的class到結構(2)?

四、JarLauncher執(zhí)行流程分析

 

看完這個流程在分析下第三節(jié)留的問題,如流程圖首先使用Appclassloader加載了JarLauncher類并創(chuàng)建了LaunchedURLClassLoader類,而LaunchedURLClassLoader是屬于spring-boot-loader.jar包里面的,而Appclassloader是普通的加載器不能加載嵌套的jar里面的文件,所以如果把spring-boot-loader.jar放到lib 目錄下,Appclassloader將找不到LaunchedURLClassLoader。所以在打包時候

拷貝本來應該放入到lib里面的spring-boot-loader.jar里面的class到結構(2)。

五、總結

spring-boot-load模塊通過自定義jar包結構自定義類加載器優(yōu)雅的實現(xiàn)了嵌套jar資源的加載,通過打包時候重新設置啟動類和組織jar結構,通過運行時設置自定義加載器來實現(xiàn)嵌套jar資源加載。

相關文章

  • 使用Filter過濾器中訪問getSession()要轉化

    使用Filter過濾器中訪問getSession()要轉化

    這篇文章主要介紹了使用Filter過濾器中訪問getSession()要轉化,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java基礎知識精通塊作用域與條件及switch語句

    Java基礎知識精通塊作用域與條件及switch語句

    塊(block,即復合語句)是指由若干條 Java 語句組成的語句,并由一對大括號括起來。塊確定了變量的作用域。一個塊可以嵌套在另一個塊中;條件語句、switch語句是我們常見會用到的結構,感興趣的朋友來看看吧
    2022-04-04
  • 編寫調(diào)用新浪微博API的Java程序來發(fā)送微博

    編寫調(diào)用新浪微博API的Java程序來發(fā)送微博

    這篇文章主要介紹了編寫調(diào)用新浪微博API的Java程序來發(fā)送微博的方法,只是展示了一個基本的程序框架而非一個完整的圖形化軟件:)需要的朋友可以參考下
    2015-11-11
  • SpringCloud對服務內(nèi)某個client進行單獨配置的操作步驟

    SpringCloud對服務內(nèi)某個client進行單獨配置的操作步驟

    我們的微服務項目用的是springCloud,某個微服務接口因為數(shù)據(jù)處理量大,出現(xiàn)了接口超時的情況,我們需要單獨修改這一個feignClient的超時時間,所以本文介紹了SpringCloud對服務內(nèi)某個client進行單獨配置的操作步驟,需要的朋友可以參考下
    2023-10-10
  • Java Spring事務的隔離級別詳解

    Java Spring事務的隔離級別詳解

    這篇文章主要介紹了Java Spring事務的隔離級別,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2021-10-10
  • SpringBoot框架實現(xiàn)切換啟動開發(fā)環(huán)境和測試環(huán)境

    SpringBoot框架實現(xiàn)切換啟動開發(fā)環(huán)境和測試環(huán)境

    這篇文章主要介紹了SpringBoot框架實現(xiàn)切換啟動開發(fā)環(huán)境和測試環(huán)境,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java HtmlEmail 郵件發(fā)送的簡單實現(xiàn)代碼

    Java HtmlEmail 郵件發(fā)送的簡單實現(xiàn)代碼

    下面小編就為大家?guī)硪黄狫ava HtmlEmail 郵件發(fā)送的簡單實現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Javac/javap 自帶工具簡單使用講解

    Javac/javap 自帶工具簡單使用講解

    這篇文章主要介紹了Javac/javap 自帶工具簡單使用講解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • SpringBoot 如何實時刷新靜態(tài)文件

    SpringBoot 如何實時刷新靜態(tài)文件

    這篇文章主要介紹了SpringBoot如何實時刷新靜態(tài)文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java 中繼承和多態(tài)詳細介紹

    java 中繼承和多態(tài)詳細介紹

    這篇文章主要介紹了java 中繼承和多態(tài)詳細介紹的相關資料,需要的朋友可以參考下
    2017-05-05

最新評論