`
susam
  • 浏览: 104956 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

正确、安全地停止SpringBoot应用服务

    博客分类:
  • java
 
阅读更多

引言

Spring Boot,作为Spring框架对“约定优先于配置(Convention Over Configuration)”理念的最佳实践的产物,它能帮助我们很快捷的创建出独立运行、产品级别的基于Spring框架的应用,大部分Spring Boot应用只需要非常少的配置就可以快速运行起来,是一个与微服务(MicroServices)相当契合的微框架。

网络上关于Spring Boot的QuickStart式中文内容已经相当丰富,但是对于部署后怎样便捷、安全地停止服务(shutdown),还比较缺乏,最近发现Spring Boot的官方指南更新了相关内容,因此结合该部分更新,对如何基于官方提供的特性正确地停止Spring Boot应用进行简单说明。

 

主要有两种方式:通过HTTP发送shutdown信号,或者通过service stop的方式

 

方式一:通过HTTP发送shutdown信号

该方式主要依赖Spring Boot Actuator的endpoint特性,具体步骤如下:

 

1. 在pom.xml中引入actuator依赖

 

<dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

 

2. 开启shutdown endpoint

 

Spring Boot Actuator的shutdown endpoint默认是关闭的,因此在application.properties中开启shutdown endpoint:

 

#启用shutdown

endpoints.shutdown.enabled=true

#禁用密码验证

endpoints.shutdown.sensitive=false

 

3. 发送shutdown信号

 

shutdown的默认url为host:port/shutdown,当需要停止服务时,向服务器post该请求即可,如:

curl -X POST host:port/shutdown

将得到形如{"message":"Shutting down, bye..."}的响应

 

4. 安全设置

 

可以看出,使用该方法可以非常方便的进行远程操作,但是需要注意的是,正式使用时,必须对该请求进行必要的安全设置,比如借助spring-boot-starter-security进行身份认证:

 

pom.xml添加security依赖

 

<dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-security</artifactId>

</dependency>

开启安全验证

在application.properties中变更配置,并

 

#开启shutdown的安全验证

endpoints.shutdown.sensitive=true

#验证用户名

security.user.name=admin

#验证密码

security.user.password=secret

#角色

management.security.role=SUPERUSER

指定路径、IP、端口

 

#指定shutdown endpoint的路径

endpoints.shutdown.path=/custompath

#也可以统一指定所有endpoints的路径`management.context-path=/manage`

#指定管理端口和IP

management.port=8081

management.address=127.0.0.1

 

 

方式二:部署为Unix/Linux Service

该方式主要借助官方的spring-boot-maven-plugin创建"Fully executable" jar ,这中jar包内置一个shell脚本,可以方便的将该应用设置为Unix/Linux的系统服务(init.d service),官方对该功能在CentOS和Ubuntu进行了测试,对于OS X和FreeBSD,可能需要自定义。具体步骤如下:

 

1. 在pom.xml中引入插件:

 

xml <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> </configuration> </plugin>

 

2. 设置为系统服务

 

将你的应用打成jar包,部署到服务器,假设部署路径为/var/app,包名为app.jar,通过如下方式将应该设置为一个系统服务:

sudo ln -s /var/app/app.jar /etc/init.d/app

 

3. 赋予可执行权限:

 

chmod u+x app.jar

 

4. 以系统服务的方式管理

 

接下来,就可以使用我们熟悉的service foo start|stop|restart来对应用进行启停等管理了

sudo service app start|stop

命令将得到形如Started|Stopped [PID]的结果反馈

 

默认PID文件路径:/var/run/appname/appname.pid

默认日志文件路径:/var/log/appname.log

 

这可能是我们更熟悉也更常用的管理方式。

 

自定义参数

 

在这种方式下,我们还可以使用自定义的.conf文件来变更默认配置,方法如下:

 

在jar包相同路径下创建一个.conf文件,名称应该与.jar的名称相同,如appname.conf

在其中配置相关变量,如:

 

JAVA_HOME=/usr/local/jdk

JAVA_OPTS=-Xmx1024M

LOG_FOLDER=/custom/log

安全设置

 

作为应用服务,安全性是一个不能忽略的问题,如下一些操作可以作为部分基础设置参考:

 

为服务创建一个独立的用户,同时最好将该用户的shell绑定为/usr/sbin/nologin

赋予最小范围权限:chmod 500 app.jar

阻止修改:sudo chattr +i app.jar

对.conf文件做类似的工作:chmod 400 app.conf,sudo chown root:root app.conf

References:

Installing Spring Boot applications

Endpoints

Securing sensitive endpoints

分享到:
评论

相关推荐

    Centos下SpringBoot项目启动与停止脚本的方法

    Centos下SpringBoot项目启动与停止脚本...3. 在使用脚本时,需要注意当前项目的名称,以便脚本可以正确地启动和停止项目。 在Centos系统下使用Maven脚本来启动和停止SpringBoot项目可以使我们的项目更加自动化和高效。

    springboot mina 串口对接

    综上所述,SpringBoot与Mina的结合,使我们能够方便地在Java应用程序中实现串口通信,解决粘包和断包问题,同时可能借助WebSocket实现与Web客户端的交互。"treatment_serial_service"作为核心组件,是串口通信功能的...

    使用Procrun把springboot安装为windows服务.rar

    而将Spring Boot应用部署到Windows服务器上,通常我们会利用Apache的Procrun工具将其注册为系统服务,以便实现自动化启动、停止和管理。下面将详细解释这个过程。 首先,让我们了解一下**Spring Boot**。Spring ...

    SpringBoot2制作成Window服务的方法.docx

    2. 将winsw.exe放在你的SpringBoot应用jar旁边,并重命名为一个有意义的名字,例如`myapp-service.exe`。 3. 创建一个XML配置文件,比如`myapp-service.xml`,用于定义服务的行为。以下是一个示例配置: ```xml ...

    Springboot + rxtx 实现串口读写应用部分源码

    总结来说,"Springboot + rxtx 实现串口读写应用"涉及到将 SpringBoot 的便利性和 RXTX 的串口通信能力结合,创建一个能够高效、稳定地进行串口交互的 Java 应用。通过合理的设计和测试,可以构建出一个可靠的串口...

    springboot部署完整步骤

    6. **进程管理**:使用`ps`命令来查看当前运行的Java进程,如果需要停止Spring Boot应用,则可以通过`kill`命令来实现。 ``` ps -aux | grep java kill -9 [PID] ``` #### 四、扩展配置(非必要) 除了上述基本...

    Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法

    在Linux环境中,管理和部署Java应用程序,特别是Spring Boot应用,通常会使用Shell脚本来自动化启动、停止等操作。本文将详细讲解如何编写一个用于启动和停止Spring Boot jar程序的Shell脚本,以及脚本中涉及的关键...

    详解SpringBoot注册Windows服务和启动报错的原因

    最后,介绍一些常用的winsw命令,用于安装、删除、启动、停止、重启服务以及查看服务状态。这些命令可以帮助我们更加便捷地管理Windows服务。 综上所述,SpringBoot注册Windows服务时遇到报错通常与服务配置、环境...

    手写SpringBoot框架

    SpringBoot框架是Java开发中的一个热门工具,它简化了创建独立、生产级别的基于Spring的应用程序。这个"手写SpringBoot框架"项目旨在帮助开发者深入理解SpringBoot的工作原理,通过阅读其底层源码并尝试自己实现,...

    jenkins自动部署springboot项目

    在配置Jenkins构建任务时,需要确保远程服务器上的目录与脚本中的路径一致,以保证脚本能够正确地执行相关操作,比如上传文件到远程服务器、执行远程服务器上的脚本等。 ### 构建后操作 文档中提到了一个脚本`boot...

    非maven springboot项目

    确保所有的依赖项都被正确地添加并按正确的顺序加载,以避免类加载问题。 3. **创建主类**:在Spring Boot项目中,主类是启动应用的入口点,通常包含`@SpringBootApplication`注解。我们需要创建这样一个类,并在...

    SpringBoot+html实现h5录音上传到后台

    4. **SpringBoot后端**:在后台,我们需要创建一个SpringBoot应用来接收前端发送的音频文件。SpringBoot是基于Spring框架的轻量级开发工具,简化了配置并提供了快速构建应用的能力。 5. **MultipartFile处理**:...

    springboot-video.rar

    Spring Boot是Spring框架的一个子项目,它简化了Java应用的初始设置和配置,使开发者能够快速地创建独立运行的、生产级别的基于Spring的应用。通过内嵌Tomcat或Jetty等服务器,以及自动配置的特性,Spring Boot使得...

    springboot+quartz 动态化配置定时任务

    通过整合SpringBoot和Quartz,我们可以利用Spring的自动配置能力,方便地在Spring应用中集成定时任务功能。 二、Quartz动态配置 1. 引入依赖:首先,在`pom.xml`文件中引入SpringBoot的SpringBoot-starter-quartz...

    linux 下 springboot项目升级 及 启动脚本,自用留存

    - 通常通过查询系统中的Java进程,找出对应的SpringBoot应用并发送`SIGTERM`信号来优雅地停止服务。例如,可以使用`jps`找到应用进程ID,然后执行`kill -15 &lt;PID&gt;`。 5. **启动并停止脚本**: - 这个脚本可能结合...

    SpringBoot最新2021年面试题,高级面试题及附答案解析.md

    在SpringBoot应用的引导阶段,`bootstrap`中的配置信息即开始生效。通常情况下,我们会在如Spring Cloud Config或Nacos等场景下使用`bootstrap`文件。值得注意的是,`bootstrap`文件内的属性是不可被覆盖的。 - **...

    SpirngBoot jar 包windows自动部署

    本文将深入探讨如何将一个SpringBoot应用打包为jar文件,并在Windows操作系统中实现自动部署,将其作为服务运行。 首先,我们需要了解SpringBoot的jar部署方式。SpringBoot的应用程序通常被打包为一个可执行的jar...

    springboot整合eureka源代码,学习资料

    通过以上步骤,我们可以成功地在SpringBoot应用中整合Eureka,实现微服务之间的服务注册与发现。这只是一个基础的整合过程,实际应用中还需要考虑容错机制、监控、日志等更多复杂的场景。在深入学习微服务架构时,还...

    启动停止java服务的shell脚本

    本文将详细介绍如何使用Shell脚本来启动和停止Java服务,适用于包括SpringBoot在内的各种Java应用程序。 首先,让我们理解什么是Shell脚本。Shell脚本是Linux或Unix操作系统中的批处理程序,由一系列命令组成,可以...

    基于SpringBoot的CRM酒店客户关系管理系统.zip

    - 内嵌Web服务器:如Tomcat或Jetty,允许快速地启动和停止应用程序,无需单独部署。 - Actuator:提供健康检查、监控、审计等运维功能,便于系统管理和维护。 - Starter POMs:预定义的Maven依赖集合,简化构建...

Global site tag (gtag.js) - Google Analytics