1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

这篇具有很好参考价值的文章主要介绍了1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目标

在IDEA编辑器中一键将本地已经打包好的SpringBoot项目部署到linux环境,实现秒级部署
前置知识:需掌握Maven的打包

迭代步骤

  1. 在windows环境使用命令启动SpringBoot项目
  2. 在Linux环境使用命令启动项目
  3. 在Linux环境使用脚本启动项目
  4. 优化脚本,每次启动时先关闭旧项目
  5. 分离依赖,每次上传Linux环境只上传几百k的代码包
  6. 搭配IDEA插件,实现在IDEA中一键部署启动

一、前提:有一个Windows环境可以启动的SpringBoot项目jar包

1、使用Maven的package命令打出一个携带依赖的jar包

例如:

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

2、Window启动jar包

java -jar SpringBootTest-0.0.1-SNAPSHOT.jar

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

启动完毕,说明jar包是可以正常启动的。

二、linux环境启动jar包

1、先将jar包扔到linux环境

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

2、测试是否可以启动(需要有Java环境)

java -jar SpringBootTest-0.0.1-SNAPSHOT.jar 

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

说明在Linux环境也是可以正常启动的

但是以上的启动方式有个问题,窗口一关项目就自动关闭了

3、优化启动脚本,改为后台启动,并将日志输出到springboot.log

nohup java -jar SpringBootTest-0.0.1-SNAPSHOT.jar > springboot.log 2>&1 &
# 解释
# 'nohup': 用于在后台运行命令,并将其与当前终端会话脱离,即使关闭终端,命令也将继续在后台运行。
# '> springboot.log':此部分使用重定向操作符 > 将标准输出重定向到 springboot.log 文件中。程序的标准输出将被写入到 springboot.log 文件中,而不会在终端上显示。
# '2>&1':此部分使用重定向操作符 2>&1 将标准错误(stderr)重定向到标准输出(stdout),即将标准错误与标准输出一起写入到 springboot.log 文件中。
# '&':最后一个 & 操作符将命令置于后台运行,使得程序在后台持续运行,而不会阻塞当前终端会话。

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

启动成功,进程号为9777

以上的脚本也存在问题,第二次启动的时候,会因为已经启动了一个服务,端口占用启动不了

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

4、完善脚本,启动时,如果存在已经启动的服务,先关闭,再启动

创建脚本

vim start.sh

脚本内容

# 关闭程序
# fileName为jar包的名称
fileName=SpringBootTest-0.0.1-SNAPSHOT.jar
pid=$(ps -ef | grep $fileName| grep -v "grep" | awk '{print $2}')
kill -9 $pid

# 启动项目
nohup java -jar $fileName > springboot.log 2>&1 &

之后,启动项目就可以

sh start.sh

至此,SpringBoot项目在Linux的启动就说明完毕。

但是,以上的部署方式还存在一些问题,在只有web依赖的时候,jar的大小就已经达到17M,

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

而在实际开发中,jar包的大小甚至会到达一百多兆。例如这样:

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

为什么明明没有多少代码,包的大小却这么大呢?

解压SpringBootTest-0.0.1-SNAPSHOT.jar包查看内容

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

可以看出,lib文件夹占用了16.7M,而lib文件夹里面是什么东西呢?

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

可以看到,就是各种的依赖。

所以,就引发了新的优化方向,能不能将依赖包直接放在服务器上,每次只更新自己的代码?

答案是:可以!在实际开发中,依赖包一般来说是不会动的,于是开始第三步。

三、分离依赖部署

1.上传依赖jar包Linux服务器

(1)创建lib文件夹

mkdir lib

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

(2)将jar包中的/BOOT-INF/lib目录底下的jar包全部上传到Linux服务器的lib文件夹

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

2.改造项目的pom.xml文件

增加配置:

    <build>
        <plugins>
            <!-- 解决jar中没有主清单属性问题 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.example.springboottest.SpringBootTestApplication</mainClass>
                    <!-- jar包不携带依赖配置开始-->
                    <layout>ZIP</layout>
                    <includes>
                        <include>
                            <groupId>nothing</groupId>
                            <artifactId>nothing</artifactId>
                        </include>
                    </includes>
                    <!-- jar包不携带依赖部署配置结束-->
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

3.重新package

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

新生成的jar包仅仅只有156kb

4.上传到服务器

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

这时候,如果使用原本的脚本启动就会报错:

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

5.使用-Dloader.path指定外部依赖包

(1)增加启动文件start2.sh

cp start.sh start2.sh

(2)在java -jar后追加-Dloader.path=./lib

# 关闭程序
fileName=SpringBootTest-0.0.1-SNAPSHOT.jar
pid=$(ps -ef | grep $fileName| grep -v "grep" | awk '{print $2}')
kill -9 $pid

# 启动项目
nohup java -jar -Dloader.path=./lib  $fileName > springboot.log 2>&1 &

使用外部依赖启动成功

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

到此,使用外部依赖启动就完成了,只要加上-Dloader.path=./lib就可以了

6.合并start.sh和start2.sh脚本

第五步还存在的一个问题,虽然这个方法很好用,但是又增加了一个脚本。公司内部,总是有人想要打全量包,使用自带的依赖,有的人想要打不携带依赖的包,可以快速部署启动,这时候,就需要区分,到底是要用start.sh脚本还是start2.sh脚本,于是,将start.shstart2.sh脚本进行合并,大于10M的时候,就使用内部依赖,小于10M的时候就使用外部依赖

合并后的start.sh脚本:

# 关闭程序
fileName=SpringBootTest-0.0.1-SNAPSHOT.jar
pid=$(ps -ef | grep $fileName| grep -v "grep" | awk '{print $2}')
kill -9 $pid

# 获取jar包的大小
filesize=`ls -l $fileName | awk '{ print $5 }'`
# 多少M以上使用外部依赖
maxsize=$((1024 * 1024 * 10)) # 10M

if [ $filesize -gt $maxsize ]
then
  echo "文件大小为【$filesize】,使用内部依赖启动"
  nohup java -jar -Dloader.path=./lib  $fileName > springboot.log 2>&1 &
else
  echo "文件大小为【$filesize】,使用外部依赖启动"
  nohup java -jar $fileName > springboot.log 2>&1 &
fi

适配两种情况

小于10M的jar包使用外部依赖
1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

大于10M的jar包使用内部依赖

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

在第三步优化完之后,jar包的大小大大减少,只剩下1M都不到,每次上传耗时不到1s,还能不能继续优化呢?

答案也是可以!当前还存在的问题是:

1、需要手动选择文件上传。

2、需要手动执行脚本

于是,进行第四步优化,引入Alibaba Cloud Toolkit插件

四、搭配Alibaba Cloud Toolkit插件使用,实现一键上传文件,并执行脚本

1、IDEA安装Alibaba Cloud Toolkit插件

1.1 从插件市场中下载Alibaba Cloud Toolkit插件,并重启IDEA。

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

2.配置服务器地址

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

可以看到就增加了一条新的配置

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

3.配置上传地址和执行的命令

查看所在路径

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

点击上传,配置上传的文件、上传地址以及执行的脚本

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

填加执行命令

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

4.点击Upload按钮

成果:1秒部署SpringBoot项目

1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)

提示:由于该插件安装后会在IDEA的左右侧边栏出现好几个其他的功能按钮,可以将他们移除,只留下底下的上传功能。

操作方式:
1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)文章来源地址https://www.toymoban.com/news/detail-443682.html

到了这里,关于1秒将本地SpringBoot项目jar包部署到Linux环境(看这一篇就够了)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot项目中引入本地依赖jar包,如何打包到lib文件夹中

    前言: 工作中,碰到过springboot框架构建的java web项目,需要集成第三方推送功能,于是使用到了小米推送服务,下载了相关jar包。项目中引入本地jar,问题不大,编写完代码后,通过测试类测试,也没问题。然后就准备打包部署到开发服上。由于项目是通过tomcat部署的,所以

    2024年02月11日
    浏览(31)
  • Linux环境下运行springboot程序(jar包)

    目录 一.用FinalShell连接虚拟机 FinalShell如何连接服务器? 二.Linux下需要安装Linux版本的JDK和Mysql数据库 三.在Linux下运行SpringBoot程序 1.Boot程序打包依赖SpringBoot对应的Maven插件即可打包出可执行的jar包 2.运行jar包使用jar命令进行 (1)运行以下命令来运行jar文件: (2)按照ip地址

    2024年02月12日
    浏览(17)
  • windows部署springboot项目 jar项目 (带日志监听和开机自起脚本)

    1.把项目打包成jar包,本例演示打包后的jar文件名为demo.jar ———————————————— 2.需要装好java环境,配置好JAVA_HOME,CLASSPATH,PATH等环境变量 ———————————————— 3.在 %JAVA_HOME%bin 目录下,找到 javaw.exe,复制一份并改名为demo.exe ———————

    2024年02月13日
    浏览(20)
  • ideal一键部署SpringBoot项目jar包到服务器

    我们在开发环境部署项目一般通过ideal将项目打包成jar包,然后连接linux服务器,将jar手动上传到服务中,重启服务。 概括的说流程是这样的: 本地打包-上传到服务器-kill掉以前的服务-重新启动jar包服务 每次总是循环这一系列的操作,这都是一些固定的流水线操作,对于流水线

    2024年02月03日
    浏览(22)
  • Jenkins+Gitlab+Springboot项目部署Jar和image两种方式

    Springboot环境准备 利用spring官网快速创建springboot项目。  添加一个controller Gitlab准备 具体安装参考之前的文章,《容器化部署Gitlab》 首先进行中文显示设置 查看所有项目:  创建local-springboot-demo项目: 本地玩可以设置公开权限。 如果团队根据具体情况设置不同的访问权限。

    2024年02月12日
    浏览(73)
  • Linux 部署Java项目-jar包和war包(五)

    部署之前先说下两种包,java项目部署到服务器一般有用war包的,也有用jar包的,微服务spring-cloud普及后大部分打包都是jar,部署之前先搞清楚自己要打war包还是jar包,下面小介绍两种包的区别: spring boot既可以打成war发布,也可以打成jar包发布。说一下区别: jar包: 直接通

    2024年02月04日
    浏览(22)
  • window服务器环境将springboot项目 jar包安装成一个window服务自启动

    目录 1.下载WinSW工具 2.新建一个Window Service信息的xml文件 3.将xml和exe重命名 4.安装卸载服务 5.修改配置文件 6.常用命令(注意winsw是exe名字 将下载的WinSW-x64.exe和新建的xml文件,名字需要保持一致 卸载需要 关闭服务后 再执行卸载命令,不然刷新后还会在服务列表,只是服务已经

    2024年02月08日
    浏览(19)
  • SpringBoot访问静态资源和jar外部静态资源,部署前端打包后的vue项目放入静态资源里

    记录一下使用SpringBoot访问静态资源和SpringBoot打包之后的jar外部静态资源,在开发的时候,一般选择前后端分离的方式,前端使用vue 后端使用SpringBoot,通常情况下,部署都是前端通过http去请求后端资源,涉及到http请求,那么肯定需要资源的目标地址IP,一般云端部署给到I

    2024年02月09日
    浏览(43)
  • 若依框架(RuoYI)项目打包(jar)方法,部署到 Linux 服务器

    在若依框架的 bin 目录下,存在着三个 bat 文件,一个是清除之前的依赖的自动化 bat 脚本( clean.bat ),一个是自动化项目打包的 bat 脚本( package.bat ),一个是运行若依项目的脚本( run.bat ) 将ruoyi-admin 文件夹内的 pom.xml 文件内的 packaging 的值改成 jar 打包前,要清除之前的

    2024年02月12日
    浏览(32)
  • Mac环境下安装nginx并本地部署项目

    1、前提 必须安装了homebrew,可在终端输入命令 brew -v 查看是否已经安装,如果输入指令出现版本号说明已经安装成功 如果未安装先安装(homebrew官网地址) 安装完之后再次输入 brew -v 查看是否有版本号 2、执行 brew search nginx 命令查询要安装的软件是否存在 3、执行 brew insta

    2024年02月16日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包