摘要:所以在下面,可以把一个文件直接写在一个文件的开头,这样子会被认为是一个。而处理软件在读取这个文件时,仍然可以正确地处理。还可以自动识别是处于还是不同中。
spring boot executable jar/war
spring boot里其实不仅可以直接以 java -jar demo.jar的方式启动,还可以把jar/war变为一个可以执行的脚本来启动,比如./demo.jar。
把这个executable jar/war 链接到/etc/init.d下面,还可以变为linux下的一个service。
只要在spring boot maven plugin里配置:
org.springframework.boot spring-boot-maven-plugin true
这样子打包出来的jar/war就是可执行的。更多详细的内容可以参考官方的文档。
http://docs.spring.io/spring-...
zip格式里的magic number生成的jar/war实际上是一个zip格式的文件,这个zip格式文件为什么可以在shell下面直接执行?
研究了下zip文件的格式。zip文件是由entry组成的,而每一个entry开头都有一个4个字节的magic number:
Local file header signature = 0x04034b50 (read as a little-endian number) 即 PK 03 04
参考:https://en.wikipedia.org/wiki...
zip处理软件是读取到magic number才开始处理。所以在linux/unix下面,可以把一个bash文件直接写在一个zip文件的开头,这样子会被认为是一个bash script。 而zip处理软件在读取这个文件时,仍然可以正确地处理。
比如spring boot生成的executable jar/war,的开头是:
#!/bin/bash # # . ____ _ __ _ _ # / / ___"_ __ _ _(_)_ __ __ _ # ( ( )\___ | "_ | "_| | "_ / _` | # / ___)| |_)| | | | | || (_| | ) ) ) ) # " |____| .__|_| |_|_| |_\__, | / / / / # =========|_|==============|___/=/_/_/_/ # :: Spring Boot Startup Script :: #
在script内容结尾,可以看到zip entry的magic number:
exit 0 PK^C^Dspring boot的launch.script
实际上spring boot maven plugin是把下面这个script打包到fat jar的最前面部分。
https://github.com/spring-pro...
这个launch.script 支持很多变量设置。还可以自动识别是处于auto还是service不同mode中。
所谓的auto mode就是指直接运行jar/war:
./demo.jar
而service mode则是由操作系统在启动service的情况:
service demo start/stop/restart/status
所以fat jar可以直接在普通的命令行里执行,./xxx.jar 或者link到/etc/init.d/下,变为一个service。
总结jar/war实际就是zip格式
spring-boot-maven-plugin把启动脚本打到executable jar/war的最前面
脚本的最后一行是exit 0,脚本只执行自己的内容,不会执行到jar/war里的内容
zip文件由多个entry组成,entry的开头有magic number,所以zip处理软件可以跳过前面的脚本,准确找到zip entry
微信公众号横云断岭的专栏
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/72611.html
摘要:第二个类级别注解是。将引导应用程序,启动,从而启动自动配置服务器。比如想使用不同版本的,具体如下在标签中还可以指定编译的版本和项目的编码格式指定项目编码为使用插件可以为项目提供的操作方式,的个,默认。 引言 Spring 框架对于很多 Java 开发人员来说都不陌生。Spring 框架包含几十个不同的子项目,涵盖应用开发的不同方面。如此多的子项目和组件,一方面方便了开发人员的使用,另外...
摘要:市长信箱邮件查询服务将应用部署到在上一章我完成了将部署到的工作和都具有能快速启动的特性因此是一对用来部署微服务的黄金搭档在计划中基于的应用也将部署到之上那我们就开始行动吧将部署到上需要执行以下步骤保证打包后的可执行能正常启动在应用中编写镜像 市长信箱邮件查询服务: 将SpringBoot应用部署到Docker 在上一章, 我完成了将ES部署到Docker的工作. SpringBoot和...
摘要:这里使用的是数据库启动类上加上注解在启动类中添加对包扫描扫描多个包下的可以有以下几种方法扫描会自动加载相关配置,数据源就会自动注入到中,会自动注入到中,可以直接使用。有配置文件下的使用扫描多个包下的可以有以下几种方法扫描 Spring-Boot 学习笔记 1 Spring-Boot 介绍 1.1 什么是Spring-Boot Spring-Boot是由Pivotal团队提供的全新框架...
摘要:它使用约定大于配置的理念让你的项目快速运行起来。如何使用构建工程第一步,当然是安装傻瓜式教程,请自行百度。包名,填完和后自动生成,默认即可。确认无误,点完成创建即可。 微信公众号:一个优秀的废人如有问题或建议,请后台留言,我会尽力解决你的问题。 前言 新年立了个 flag,好好运营这个公众号。具体来说,就是每周要写两篇文章在这个号发表。刚立的 flag 可不能这么快打脸。下面送上本周第...
阅读 725·2021-11-23 09:51
阅读 792·2021-11-23 09:51
阅读 2477·2021-11-15 18:01
阅读 3787·2021-10-11 11:07
阅读 2372·2021-09-22 15:30
阅读 1045·2021-09-22 14:59
阅读 1503·2019-08-30 15:55
阅读 1727·2019-08-30 15:52