在使用assembly来打包springboot微服务项目前,我想说一说,目前springboot项目的几种常见的部署方式。
使用docker容器去部署,将springboot的应用构建成一个docker image,然后通过容器去启动镜像 ,这种方式在需要部署大规模的应用和应用扩展时是非常方便的,属于目前工业级的部署方案,但是需要掌握docker的生态圈技术。
使用fatjar直接部署启动,这是很多初学者或者极小规模情况下的一个简单应用部署方式。
本文主要针对第二种部署方式提供一种更加友好的打包方案,是部署管理更加轻松,第一种方式可能未来我会在自己博客中写。
一、为什么要将springboot服务化打包 ?
最近我看到一个项目团队,他们在采用springboot开发完项目构建交互给运维团队就是一个spring boot 的fatjar。而且这种原始打出的包在传统型项目开发公司,对于运维人员来说无疑是很致命的,项目交付后整个配置文件都被隐藏到打成的jar中,针对不同的环境修改配置文件就变成了一件很困难的事情。因此,我们在公司引入任何新技术时,一定要考虑怎么去做服务化和工程化,如果仅仅引用技术框架,很多时候可能只需要加入几个依赖,看下api写几行代码就能跑起来。
针对上面的这种问题,要去做服务化和工程化,大致要解决两点问题:
让springboot能够加载jar外的配置文件。
提供一个服务化的启动脚本,这个脚本一般是shell或者windows下的bat ,有了springboot的应用服务脚本后,就可以很容易的去启动和停止springboot的应用了。
二、打包后的springboot应用结构图
这里先来看下使用assembly将springboot服务化打包后的效果图。
三、服务化打包重要步骤
下面是打包springboot的详细步骤。
3.1 加入assembly打包插件
maven-assembly-plugin
3.0.0
src/main/assembly/assembly.xml
make-assembly
package
single
从上面代码看出了我把assembly的配置放在main目录下,这个是习惯,可以不放这里也可以,下面就是一个assembly在项目中的大致结构图:
3.2 assembly.xml配置
assembly的配置不同的应用和下面配置也差不多,无非就是打包服务脚本、jar、配置文件等。从下面的代码中config配置就会发现, assembly将配置文件打到了config下。
1.0
tar.gz
src/main/assembly/bin
bin
0755
src/main/assembly/config
config
0644
target
lib
*.jar
src/main/resources
logs
0755
**/*
3.3 编写服务脚本
现在写linux环境的脚本。
第一个:start.sh启动脚本
#!/bi