Spring boot系列3 - Spring boot项目的运行和关闭方式

Spring boot项目的运行方式

对于前面的hello项目,我们是在IDE中直接运行的,实际上Spring boot项目(主要讨论web项目)的运行方式有很多种,包括:

  • 在IDE中运行
  • 通过maven插件运行
  • 通过java -jar的方式运行
  • 直接打包成Linux系统下的可执行文件
  • 打包成war包的形式在容器中运行

下面我们简单看一下每一种运行方式

在IDE中运行

只需要找到入口类,然后直接右键运行就可以了。

通过maven插件运行

切换到项目的根目录下,执行 mvn spring-boot:run命令。

mvn spring-boot:run

通过java -jar的方式运行

首先把项目打包成Jar文件,切换到项目根目录,然后执行打包命令:

mvn package

如果在打包时想跳过测试可以直接执行下面的命令:

mvn -Dmaven.test.skip=true package

maven会在target目录中生成一个hello-1.0.jar,执行下面的命令便可以运行hello项目:

java -jar target\hello-1.0.jar

直接打包成Linux系统下的可执行文件

除了通过java -jar的方式运行外,在linux系统中,我们还可以直接把spring boot项目打包成可执行文件的形式,只需要添加如下配置,(为了方便,这儿把打包后的Jar包名称改成了hello):
在这里插入图片描述
打包结束后,把jar包拷贝到linux系统中,然后通过chmod u+x hello.jar赋予执行权限,便可以直接执行。

./hello.jar

这种方式虽然非常方便,但在实际的环境中我们可能想要配置一些JVM参数之类的信息,这时应该怎么办呢?可以使用如下的方式:
在hello.jar所在的目录下创建一个hello.conf文件,然后在其中添加参数信息:

JAVA_OPTS=-Xmx1024M

需要注意的是除了后缀不同,配置文件的名称必须和项目的jar包同名,也就是hello.jar对应的配置为hello.conf。具体的可配置项可以参考如下文档:
https://docs.spring.io/spring-boot/docs/current/reference/html/deployment.html#deployment Customizing a Script When It Runs 部分。

打包成war包形式在容器中运行

Spring boot项目默认的打包方式是jar,如果我们需要以传统war包的方式放到外部容器中运行,可以修改打包方式为war,在pom.xml中加入下面的代码:

<packaging>war</packaging>

然后执行mvn package命令便可以在target目录下找到打包好的war文件,把war文件放到容器的应用目录下即可。

在Linux系统中作为后台进程运行 - nohup

在实际的生产环境中我们可能会以java -jar的方式运行spring boot项目,但是默认的方式却是以前台的形式运行,一旦我们关闭了命令行窗口,项目便会自动退出,这显然不符合我们的需求,我们想要的是让项目在后台默默无闻的永远运行着,除非我们主动关闭掉。可以使用nohup命令让spring boot项目在后台运行,并且关闭命令行窗口时依然存在。

nohup java -jar hello-1.0.jar &  

这时,控制台的输出会被重定向到当前目录下的nohup.out文件中,如果需要重定向到其他文件,可以使用类似下面的命令:

nohup java -jar hello-1.0.jar &>> console.out &

这儿的&>>表示把标准输出和错误输出全部重定向到console.out文件中,并且是以追加的方式写入。如果不想以追加的方式,而是直接覆盖,可以使用如下命令:

nohup java -jar hello-1.0.jar &> console.out &

在Linux中作为Systemd服务运行

前提条件
在Spring boot的maven插件中配置executable属性为true。
在这里插入图片描述
把打包后的hello.jar文件被拷贝到Linux系统中,假设在/root/hello/hello.jar
在/etc/systemd/system目录下创建文件hello.service,添加如下内容:

[Unit]
Description=hello application
After=syslog.target


[Service]
Type=simple
ExecStart=/root/hello/hello.jar
ExecStop=/bin/kill -15 $MAINPID
User=root
Group=root
WorkingDirectory=/root/hello
SuccessExitStatus=143


[Install]
WantedBy=multi-user.target

注:这儿是以root账户运行hello项目的,如果想要用其他用户运行,修改User和Group配置。
然后我们就可以通过如下命令启动和停止项目:

systemctl start hello
systemctl stop hello

其他命令:

systemctl status hello # 查看服务状态
systemctl enable hello # 开机启动
sytemctl disable hello # 禁止开机启动

关闭Spring boot项目的方式

  • Linux kill命令
  • systemctrl stop
  • 优雅关闭
  • Actuator

使用Linux系统中的kill 命令

在Linux系统中,我们可以使用kill命令关闭进程,因此我们只需要找到spring boot项目对应的进程号,就可以使用kill命令关闭它。我们尽量使用sigterm信号关闭进程,如果实在关闭不了,也可以使用sigkill信号强制关闭,这种手段比较暴力,要慎用,因为可能出现数据不一致的情况,因为它没有给项目做一些必要的清理工作的机会。

ps -ef | grep hello # 找到进程号
kill -15 $APP_PID # 发送sigterm信号终止进程

使用systemctl stop关闭

如果我们已经把spring boot项目部署成了systemd服务,就可以使用systemctl stop命令关闭服务:

systemctl stop hello

优雅关闭graceful

我们可能想要的结果是,当我们发出关闭命令时,已经接收的请求继续处理完成,而新的请求不再接收,等待这些正在处理的请求完成后,再关闭项目。这样便可以使应用程序处于一致的状态,这就是优雅关闭。spring boot在2.3版本后提供了优雅关闭的功能,要想优雅的关闭应用程序,需要在application.properties文件中配置如下两个属性:

server.shutdown=graceful
spring.lifecycle.timeout-per-shutdown-phase=60s

第一个属性指定了我们想要启用优雅关闭的功能。优雅关闭的本意就是让程序体面的退出历史舞台,但是有可能某些原因导致程序始终赖着不走,这时我们也只好不留情面,强制干预了,因此第二个属性则指定了等待请求处理完成的时间,如果超过了这个时间,将会强制关闭。
我们怎么实验这种情况呢,一种方法是在我们的HelloController处理方法中让线程睡眠40s,在浏览器发出请求的同时使用kill 关闭程序,然后便可以检查它有没有遵守自己的承诺。

通过Actuator发送post请求

若想通过Actuator发送Http post请求的方式关闭项目,需要先做如下的配置:

  1. 引入对Actuator的依赖
    在这里插入图片描述

  2. 在application.yml中启用shutdown端点
    在这里插入图片描述
    配置完成后重启项目,然后通过浏览器发送 http://localhost:8888/actuator/shutdown请求关闭项目。
    注:如果用于生产环境,需要配置安全信息。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将一个现有的Eclipse项目转换为Spring Boot项目,可以按照以下步骤进行操作: 1. 创建一个新的Spring Boot项目: - 打开Eclipse,点击"File" -> "New" -> "Spring Starter Project"。 - 在弹出的对话框中,选择一个合适的项目名称和位置。 - 选择Spring Boot版本并选择所需的依赖项。 - 点击"Finish"按钮,Eclipse将自动生成一个新的Spring Boot项目。 2. 导入现有的Eclipse项目: - 在Eclipse中,右键单击新创建的Spring Boot项目,选择"Import"。 - 在导入对话框中,选择"General" -> "Existing Projects into Workspace"。 - 点击"Next"按钮,然后选择要导入的现有Eclipse项目的根目录。 - 点击"Finish"按钮,Eclipse将导入现有项目并将其包含在Spring Boot项目中。 3. 配置依赖项: - 打开新创建的Spring Boot项目中的pom.xml文件。 - 根据需要,添加或删除所需的依赖项。例如,您可能需要添加Spring Boot Starter Web依赖项来启用Web开发功能。 - 保存并关闭pom.xml文件。 4. 调整项目结构: - 将现有的源代码文件(Java文件、资源文件等)移动到新创建的Spring Boot项目的相应目录中。 - 根据需要,调整项目结构和包名。 5. 配置Spring Boot应用程序: - 在新创建的Spring Boot项目中,找到并打开Application.java文件。 - 根据需要,配置应用程序的启动和初始化设置。例如,您可以添加注解或配置文件来定义应用程序的属性和行为。 6. 运行和测试: - 在Eclipse中,右键单击Application.java文件,选择"Run As" -> "Spring Boot App"。 - 等待应用程序启动,并在控制台上查看输出信息。 - 使用适当的URL或浏览器访问您的Spring Boot应用程序,以确保它正常工作。 请注意,这只是一个基本的指南,具体的步骤可能会因项目的复杂性和需求而有所变化。在进行任何更改之前,建议您备份现有的Eclipse项目,以防万一需要恢复原始状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值