在java中excel格式变为zip什么原因_java开发Spring boot实现原理

引言

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

一丶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-boot/docs/current/reference/htmlsingle/#deployment-install

二丶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)

即 PK003004

三丶参考:https://en.wikipedia.org/wiki/Zip_(file_format)

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^D

spring boot 的 launch.script

实际上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 支持很多变量设置。还可以自动识别是处于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。

总结

以 上就是我对java开发Spring boot实现原理 问题及其优化总结,分享给大家,觉得收获的话可以点个关注收藏转发一波喔,谢谢大佬们支持!

最后,每一位读到这里的网友,感谢你们能耐心地看完。希望在成为一名更优秀的Java程序员的道路上,我们可以一起学习、一起进步!都能赢取白富美,走向架构师的人生巅峰!

进阶地址:https://ke.qq.com/course/230866?flowToken=1000327

想了解学习Java方面的技术内容以及Java技术视频的内容可加群:722040762 验证码:头条(06 必过)欢迎大家的加入哟!

5c364f03da324d0461165c52ebb4f230.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值