一、生成可运行的jar包

1、在上文整合好的SpringBoot项目中,设置packaging属性值为jar

<groupId>com.xxx</groupId>
    <artifactId>codebox</artifactId>
    <packaging>jar</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>codebox</name>
    <description>App For codebox</description>

2、选中项目,右键-》Debug As-》Debug configurations

spring项目打包成docker springboot项目打包成可执行jar包_spring项目打包成docker

3、在弹出框中,点击Maven Build,右键-》new Configurations,在Name属性中填写任意名称,点击workspace选择需要生成jar的项目,在Goals中设置目标为package,即打包成jar,如果需要,可以点击JRE选择对应JRE版本

spring项目打包成docker springboot项目打包成可执行jar包_jar_02

4、设置完成,点击Debug确认生成jar,编译器命令行输出如图所示内容,说明执行成功,刷新项目,即可在项目target

文件夹下生成.jar文件,如果一次执行不成功,可多运行几次

spring项目打包成docker springboot项目打包成可执行jar包_jar_03

二、将jar包做成后台服务

1、Linux系统下

在Linux设备上后台启动SpringBoot项目只需要一条命令:nohup sh run.sh &,run.sh脚本包含了启动SpringBoot项目的命令,由于过于简单,就不再做详细说明

2、windows系统下

由于windows系统下直接使用java -jar指令直接运行,可以使用CTRL+C打断程序运行,或当命令行窗口被关闭时,程序直接退出的现象,试了很多种方式都没有达到理想的结果,后来发现spring官方推荐使用winsw来将springboot项目作为服务运行,参考https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#deployment-windows。详细步骤如下

(1)下载winsw

1)从github上下载:winsw下载地址,需要使用的文件主要有WinSW.NET4.exe(WinSW.NET2.exe也行)和sample-minimal.xml。

spring项目打包成docker springboot项目打包成可执行jar包_winsw_04

2)下载完成后,将下载的两个文件及springboot项目的jar包放在同一个文件夹中,将winsw执行程序跟xml改成跟jar相同的名字,推荐使用项目名+Service的命名方式,比如:WinSW.NET4.exe改成projectNameService.exe,sample-minmal.xml改成projectNameService.xml。

3)编辑projectNameService.xml文件,为方便使用,此处我使用批处理文件运行jar包,并命名为start.bat

(注:考虑电脑未配置JAVA_HOME的情况,此处首先设置java环境(需自带jdk或jre),如果已配置则不需要)

start.bat

set path=%cd%\jdk1.8.0_171\bin;%path%
java -jar %cd%\codebox.jar
pause
<configuration> 
  <!-- 安装的服务名称-->
  <id>项目名称</id>
  <!-- 显示的服务名称 -->
  <name>项目名称</name>
  <!-- 服务描述 -->
  <description>服务描述</description>
  <!-- 可执行程序路径,如果是jar这里写Java的路径(如果配置了环境变量,直接写“java即可”) -->
  <!--
	<executable>/Java/jar8/bin/java.exe</executable>
	<arguments>-jar 项目名称.jar</arguments>
  -->
  <executable>start.bat</executable>
  <logmode>rotate</logmode>
</configuration>

4)到此完成配置,然后就是安装并运行服务,可以使用命令行进行到目标目录,

执行指令 项目名称.exe install 安装服务,

安装服务成功后,通过命令:net start 项目名称(服务ID),启动服务,

不过为了方便管理,此处我依旧使用批处理文件对其进行管理,主要内容有

spring项目打包成docker springboot项目打包成可执行jar包_spring项目打包成docker_05

主要指令有:

a、设置管理员模式执行:

%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
 cd /d "%~dp0"

b、安装服务:

xxx.exe install

c、启动服务

net start xxx

d、停止服务

net stop xxx

e、卸载服务

xxx.exe uninstall

f、删除服务

sc delete xxx

在执行过程中可通过,services.msc命令进入到服务界面,观察对应服务的状态变化情况,对服务进行手动操作等,就跟正常服务没什么区别

至此,再也不担心SpringBoot部署的问题了,也完美发挥了SpringBoot内嵌容器的优势