微服务打包方式的选择,jar还是war?

发布于 2022-03-09 20:55:28 字数 368 浏览 814 评论 20

微服务打包方式的选择,jar还是war?

公司刚刚开始摸索使用微服务,之前的项目打包都是war包的形式,丢到tomcat中就好了,上了微服务,发现似乎主流都是直接打成jar包,或者说,直接编写dockerFile文件,打成镜像,然后运行镜像就行了。

公司现在的打包方式还是传统的先打成war,然后丢到docker容器的映射目录下,自动解压war包,其实就是把docker当成一个小的虚拟机来使用。因为服务也不算太多,这种方式还算可以接受,而且涉及到修改配置,升级tomcat的时候都比较方便,总结起来,就是将docker当成了虚拟机在使用。项目因为不算太大,k8s和配置中心都没有加入。

想问下,大家部署是怎么弄的,如果涉及到tomcat的升级,临时性修改某些配置怎么办呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(20

勿忘初心 2022-03-11 06:31:32

你这种方式其实挺好的,如果你的项目包很大,你会发现你的容器会非常大,维护起来还是很麻烦的,但挂在外面还是挺好的。

但你如果用k8s,就涉及到要把pod分配到指定节点进行挂载,建议还是用dockerfile+jar比较好,如果项目真的大,就别用容器了。

草莓味的萝莉 2022-03-11 06:31:31

推荐Jib

岁月打碎记忆 2022-03-11 06:31:28

你这是似懂非懂的结论;你写的程序还远远达不到阿里的规模

不再见 2022-03-11 06:31:28

当然是jar。你们现在的打包方式还是虚拟机时代的思维,既然选了容器,方式要变一变

后知后觉 2022-03-11 06:31:27

都是一样的代码何来更好,都是启动socket监听一模一样的容器代码人家在springboot启动了serverstart方法和sh脚本启动的main方法完全没区别

简单气质女生网名 2022-03-11 06:31:26

回复
应该是tomcat的配置硬加易于修改调优化,只要改配置文件就行了,sprintboot修改tomcat配置比较麻烦

流心雨 2022-03-11 06:31:24

springboot用的也是tomcat,何来性能差距,不能凭感觉

醉酒的小男人 2022-03-11 06:31:21

回复
个人觉得tomcat配置还要去web容器上修改 ,springboot更方便yml还可以区分多个环境的配置明显更优秀啊,唯一的点是tomcat在xml容器支持修改的参数多一点,这点也可以通过重写start解决稍微麻烦点就是了

梅窗月明清似水 2022-03-11 06:31:19

tomcat web性能应该比springboot的要好吧,只是感觉,

绝影如岚 2022-03-11 06:31:18

1. dockerFile
2.jar

3.war

北笙凉宸 2022-03-11 06:31:18

打包的目标文件就一个 app.jar。

启动脚本都一样。

把回忆走一遍 2022-03-11 06:31:14

Spring boot、Spring cloud因为内嵌了web容器,所以才首选jar。war包是专供web容器使用的,可以包含jar,其结构基本固定,除非web容器规范改变。

心欲静而疯不止 2022-03-11 06:31:01

请教一下 分层jar 怎么玩

把回忆走一遍 2022-03-11 06:30:56

其实真正的选项只有jar和war(Dockerfile的话,也要从war和jar中选择一个,然后放到镜像中)。

Spring官方时推荐jar的,从Spring boot、Spring cloud的官方文档就可以看出来。

另外一点就是,jar的方式也一直在优化,比如最近支持了分层jar,而war方式就一直没有改进。

 

所以,结论就是,开始用jar吧。

断爱 2022-03-11 06:30:47

这哥俩是不同规范的产物,Jar 是 Java 的规则类库的打包形式,换句话来说,只要是 Java,就必然支持并使用 Jar,就象是人的零部件一样,是个正常人都会都会自带使用。。War 是 J2EE 规范的产品,是参考 Jar 的基础上,为了 J2EE (中Servlet 容器)而定制的(特定)打包格式。。因此,其只能在 Servlet 容器中使用(不包括 Servlet 容器作为应用本身的一部分存在),很明显两者的有着各自的使用场景。。如果你的应用跑在一个外部 Servlet 容器时,通常会建议使用 War 来打包(正常情况下,也只能以 War 形式打包),但如果不是一个外部 Servlet 容器,你硬用 war 来打包,除了增添烦恼以外,好象也没什么好处,所以正常来说会以你所跑的环境所指定的官方格式打包。。例如 SpringBoot 环境,官方建议打包成 jar (无论跑不跑在 docker 环境)。。

再简说 Jar 与 War 之间的差异。。。两者都是 zip 压缩文件,区别在于:war 对内部有着特别的规定,例如标准的资源文件应放在那里,所引用的外部 jar 包应该放在那里,所编译好的 class 应该放在那里,这样 Servlet 容器就能根据这些特定的位置找到所需要的内容,而 jar 就灵活得多,放什么,怎么放,除了一些简单的 META-INF 的描述外,就依赖你的需求,即从另一个角度来看,对 jar 内容的加载(特别是资源文件),更多依赖你的应用和运行环境,jar 本身并没提供特定的支持(不象 war 对于 servlet 容器)。。。这引申出来:如果你的运行环境或框架,并没有提供 jar 包格式要求的话,你就要自己来编写从 jar 包加载内容的代码。。。SpringBoot 建议打包成 jar 包,涉及到资源文件的加载时,为什么会有一些约定(目录)或配置的原因。。

总结:如果你的应用是跑在外部 Servlet 容器的话,打成 war 包是不二之选。。。其他的情况下,参考应用所跑的环境,使用官方建议进行(因为官方建议的背后会有一套完整的支持,通常不太需要过多的额外定制)

 

卸妝后依然美 2022-03-11 06:28:52

所有评论中,你是最优秀的

坐在坟头思考人生 2022-03-11 06:26:52

有道理!

2022-03-11 06:25:49

现实可能就是这样,大神!

筱果果 2022-03-11 06:24:55

我就是大神嘴里的野孩子。。。突然成了野孩子了。

只为守护你 2022-03-11 06:01:08

war 需要 appserver 作为底层环境支持,配置上war 自己的参数和 appserver 的参数也需要分开配置,这种 deployment 还能叫“微”服务吗?

可见提问的人不懂微服务的基本概念,连个 self-contained 意识都没有……估计就是公司把项目一扔也没人带的野孩子,或者带你的前辈也是野孩子出身……

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文