微服务: 部署服务

简介

微服务系列 文章中,跟大家从环境搭建、Web工程创建、提供Restful接口、热部署、Git使用以及Swagger生成文档分享了SpringBoot的入门知识。今天继续分享如何使用IDEA和maven对工程进行打包操作,然后发布代码到服务器进行部署的过程。

大家有任何问题,或者文中有不正确的地方欢迎留言评论,共同进步,再次感谢大家的阅读。

IDEA 打包

File/Project Structure 打开视图,或者使用快捷键 Ctrl+Alt+Shift+S 打开视图。

1568529858131

打开的视图如下:

1568529858131

按照 1、2、3 步骤打开下面视图,如下:

1568529858131

配置该视图的内容,分别设置 Main Class 和 选择 JAR files,如下:

1568529858131

这里特别要注意,选择生成 MANIFEST.MF 文件目录放到 resources 下面,默认会放在 main\java 目录下。

如果不修改这个目录,最终运行生成的 jar 文件,会报下面的错误:

1
Invalid or corrupt jarfile {project_name}.jar

配置完成后,点击 OK 关闭对话框即可。

接下来需要编译,点击 IDEA 的 Build 菜单,选择 Build Artifacts...,如下截图:

1568529858131

点击 Build Artifacts... 后出现视图

1568529858131

第一次直接选择 Build 选项,后续可以选择 Rebuild 或者 Clean 选项,根据你的需要进行选择即可。

等待 IDEA 打包完成后,在工程文件中会生成 out 目录和 resources 目录下面生成 META-INF 目录和对应的文件,如下图所示:

1568529858131

springboot_jar 目录下面有打包成功的 jar 文件,即 springboot.jar 文件,另外也将 tomcat 等一些其他依赖包都打包到一起了。

打开终端,执行 java -jar springboot.jar 就可以运行该项目了。

1568529858131

如果发现由于端口被占用而无法启动的情况,可以查看端口占用情况:

1
netstat -ano | findstr 8080

查到类似如下结果:

1
2
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 18948
TCP [::]:8080 [::]:0 LISTENING 18948

这里演示的进程ID是 18948,强制关闭端口进程即可

1
taskkill -F -PID 18948

部署到服务器

我使用虚拟机(Ubuntu)来简单介绍一下部署过程。虚拟机是 VMWare 其版本是 15.0.2,Ubuntu 系统版本是 19.04。如何安装虚拟机、如何在虚拟机中安装 Ubuntu 系统以及如何在 Ubuntu 中安装 Java 环境请大家自行查找资料完成,这里不赘述。

可以通过上面的方式(IDEA打包)完成后,将生成的 springboot_jar 目录拷贝到虚拟机的用户目录下,然后通过 java -jar springboot_jar/springboot.jar 来启动服务。

我们还可以通过 IDEA 的 maven 工具进行打包,步骤如下:

1、打开工程的maven视图

1568529858131

2、按照标红的1、2、3、4操作即可

成功后在 target 目录会生成对应的可执行的 jar 文件,该 jar 包包括了所有的 SpringBoot 相关的包如下图:

1568529858131

同理,复制 springboot-0.0.1-SNAPSHOT.jar 到虚拟机的用户目录,通过 java -jar springboot-0.0.1-SNAPSHOT.jar 运行服务即可。

查看 Ubuntu 的主机IP地址,可以通过 ifconfig 来获取,也可以在设置里面查找其IP地址。 ifconfig 需要按照 net-tools,安装命令如下:

1
sudo apt install net-tools

我的虚拟机的IP地址是 192.168.142.128,即 http://192.168.142.128:8080 是 Ubuntu 的 IP 地址和 Tomcat 的运行端口,回到 Windows 主机上面访问虚拟机的服务,通过下面图可以看出是成功的。

1568529858131

这里只是简单的介绍了一下如何将自己写的 SpringBoot 服务部署到服务器上面,在你的实际项目中部署没这么简单,我算是抛砖引玉吧,后续随着学习的深入我再跟大家分享一下在实际大项目中部署遇到的一些问题。


生活并没有那么复杂,要是你喜欢,大可以说我是在探索生命。

坚持原创技术分享!