最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

spring?boot?executable?jar/war?原理解析

 更新時間:2023年02月06日 09:53:44   作者:橫云斷嶺  
spring boot里其實(shí)不僅可以直接以 java -jar demo.jar的方式啟動,還可以把jar/war變?yōu)橐粋€可以執(zhí)行的腳本來啟動,比如./demo.jar,這篇文章主要介紹了spring?boot?executable?jar/war?原理,需要的朋友可以參考下

spring boot executable jar/war

spring boot里其實(shí)不僅可以直接以 java -jar demo.jar的方式啟動,還可以把jar/war變?yōu)橐粋€可以執(zhí)行的腳本來啟動,比如./demo.jar。

把這個executable jar/war 鏈接到/etc/init.d下面,還可以變?yōu)閘inux下的一個service。

只要在spring boot maven plugin里配置:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
    </configuration>
</plugin>

這樣子打包出來的jar/war就是可執(zhí)行的。更多詳細(xì)的內(nèi)容可以參考官方的文檔。

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#deployment-install

zip格式里的magic number

生成的jar/war實(shí)際上是一個zip格式的文件,這個zip格式文件為什么可以在shell下面直接執(zhí)行?

研究了下zip文件的格式。zip文件是由entry組成的,而每一個entry開頭都有一個4個字節(jié)的magic number:

Local file header signature = 0x04034b50 (read as a little-endian number)
即 PK\003\004

參考:https://en.wikipedia.org/wiki/Zip_(file_format)

zip處理軟件是讀取到magic number才開始處理。所以在linux/unix下面,可以把一個bash文件直接寫在一個zip文件的開頭,這樣子會被認(rèn)為是一個bash script。 而zip處理軟件在讀取這個文件時,仍然可以正確地處理。

比如spring boot生成的executable jar/war,的開頭是:

#!/bin/bash
#
#    .   ____          _            __ _ _
#   /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
#  ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
#   \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
#    '  |____| .__|_| |_|_| |_\__, | / / / /
#   =========|_|==============|___/=/_/_/_/
#   :: Spring Boot Startup Script ::
#

在script內(nèi)容結(jié)尾,可以看到zip entry的magic number:

exit 0
PK^C^D

spring boot的launch.script

實(shí)際上spring boot maven plugin是把下面這個script打包到fat jar的最前面部分。

https://github.com/spring-projects/spring-boot/blob/1ca9cdabf71f3f972a9c1fdbfe9a9f5fda561287/spring-boot-tools/spring-boot-loader-tools/src/main/resources/org/springframework/boot/loader/tools/launch.script

這個launch.script 支持很多變量設(shè)置。還可以自動識別是處于auto還是service不同mode中。

所謂的auto mode就是指直接運(yùn)行jar/war:

./demo.jar

service mode則是由操作系統(tǒng)在啟動service的情況:

service demo start/stop/restart/status

所以fat jar可以直接在普通的命令行里執(zhí)行,./xxx.jar 或者link到/etc/init.d/下,變?yōu)橐粋€service。

總結(jié)

  • jar/war實(shí)際就是zip格式
  • spring-boot-maven-plugin把啟動腳本打到executable jar/war的最前面
  • 腳本的最后一行是exit 0,腳本只執(zhí)行自己的內(nèi)容,不會執(zhí)行到j(luò)ar/war里的內(nèi)容
  • zip文件由多個entry組成,entry的開頭有magic number,所以zip處理軟件可以跳過前面的腳本,準(zhǔn)確找到zip entry

到此這篇關(guān)于spring boot executable jar/war 原理的文章就介紹到這了,更多相關(guān)spring boot executable內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Java向下轉(zhuǎn)型的意義

    淺談Java向下轉(zhuǎn)型的意義

    這篇文章主要介紹了淺談Java向下轉(zhuǎn)型的意義,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • java實(shí)現(xiàn)上傳文件類型檢測過程解析

    java實(shí)現(xiàn)上傳文件類型檢測過程解析

    這篇文章主要介紹了java實(shí)現(xiàn)上傳文件類型檢測過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • springboot2.0以上調(diào)度器配置線程池的實(shí)現(xiàn)

    springboot2.0以上調(diào)度器配置線程池的實(shí)現(xiàn)

    這篇文章主要介紹了springboot2.0以上調(diào)度器配置線程池的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • mybatis框架xml下trim中的prefix與suffix等標(biāo)簽的用法

    mybatis框架xml下trim中的prefix與suffix等標(biāo)簽的用法

    這篇文章主要介紹了mybatis框架xml下trim中的prefix與suffix等標(biāo)簽的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 獲取Java的MyBatis框架項目中的SqlSession的方法

    獲取Java的MyBatis框架項目中的SqlSession的方法

    SqlSession中包括已經(jīng)映射好的SQL語句,這樣對象實(shí)例就可以直接拿過來用了,那么這里就來講解獲取Java的MyBatis框架項目中的SqlSession的方法
    2016-06-06
  • 詳解Java關(guān)于JDK中時間日期的API

    詳解Java關(guān)于JDK中時間日期的API

    這篇文章主要介紹了詳解Java關(guān)于JDK中時間日期的API,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 在java中判斷兩個浮點(diǎn)型(float)數(shù)據(jù)是否相等的案例

    在java中判斷兩個浮點(diǎn)型(float)數(shù)據(jù)是否相等的案例

    這篇文章主要介紹了在java中判斷兩個浮點(diǎn)型(float)數(shù)據(jù)是否相等的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Java的AQS基本原理詳細(xì)分析

    Java的AQS基本原理詳細(xì)分析

    這篇文章主要介紹了Java的AQS基本原理詳細(xì)分析,AQS是Abstract Queued Synchronizer的簡稱,AQS提供了一種實(shí)現(xiàn)阻塞鎖和一系列依賴FIFO等待隊列的同步器的框架,本文主要講解分析其基本原理,需要的朋友可以參考下
    2024-01-01
  • 一文詳解Java8中的方法引用與構(gòu)造器引用

    一文詳解Java8中的方法引用與構(gòu)造器引用

    這篇文章主要為大家詳細(xì)介紹了Java8中的方法引用與構(gòu)造器引用的具體用法,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以參考一下
    2023-02-02
  • Java 中運(yùn)行字符串表達(dá)式的方法

    Java 中運(yùn)行字符串表達(dá)式的方法

    這篇文章主要介紹了Java 中運(yùn)行字符串表達(dá)式的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-11-11

最新評論

沐川县| 西丰县| 鄂伦春自治旗| 同仁县| 精河县| 尤溪县| 隆昌县| 开封市| 宁蒗| 大城县| 富阳市| 宁武县| 樟树市| 桐柏县| 黔南| 乳山市| 新兴县| 西青区| 石城县| 盈江县| 广平县| 海晏县| 台东市| 嘉定区| 漾濞| 安吉县| 达日县| 吐鲁番市| 平原县| 东乌珠穆沁旗| 镇平县| 乌海市| 福州市| 富川| 平阳县| 红安县| 公主岭市| 水城县| 玉屏| 油尖旺区| 图们市|