引言
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项目启动与停止脚本...3. 在使用脚本时,需要注意当前项目的名称,以便脚本可以正确地启动和停止项目。 在Centos系统下使用Maven脚本来启动和停止SpringBoot项目可以使我们的项目更加自动化和高效。
综上所述,SpringBoot与Mina的结合,使我们能够方便地在Java应用程序中实现串口通信,解决粘包和断包问题,同时可能借助WebSocket实现与Web客户端的交互。"treatment_serial_service"作为核心组件,是串口通信功能的...
而将Spring Boot应用部署到Windows服务器上,通常我们会利用Apache的Procrun工具将其注册为系统服务,以便实现自动化启动、停止和管理。下面将详细解释这个过程。 首先,让我们了解一下**Spring Boot**。Spring ...
2. 将winsw.exe放在你的SpringBoot应用jar旁边,并重命名为一个有意义的名字,例如`myapp-service.exe`。 3. 创建一个XML配置文件,比如`myapp-service.xml`,用于定义服务的行为。以下是一个示例配置: ```xml ...
总结来说,"Springboot + rxtx 实现串口读写应用"涉及到将 SpringBoot 的便利性和 RXTX 的串口通信能力结合,创建一个能够高效、稳定地进行串口交互的 Java 应用。通过合理的设计和测试,可以构建出一个可靠的串口...
6. **进程管理**:使用`ps`命令来查看当前运行的Java进程,如果需要停止Spring Boot应用,则可以通过`kill`命令来实现。 ``` ps -aux | grep java kill -9 [PID] ``` #### 四、扩展配置(非必要) 除了上述基本...
在Linux环境中,管理和部署Java应用程序,特别是Spring Boot应用,通常会使用Shell脚本来自动化启动、停止等操作。本文将详细讲解如何编写一个用于启动和停止Spring Boot jar程序的Shell脚本,以及脚本中涉及的关键...
最后,介绍一些常用的winsw命令,用于安装、删除、启动、停止、重启服务以及查看服务状态。这些命令可以帮助我们更加便捷地管理Windows服务。 综上所述,SpringBoot注册Windows服务时遇到报错通常与服务配置、环境...
SpringBoot框架是Java开发中的一个热门工具,它简化了创建独立、生产级别的基于Spring的应用程序。这个"手写SpringBoot框架"项目旨在帮助开发者深入理解SpringBoot的工作原理,通过阅读其底层源码并尝试自己实现,...
在配置Jenkins构建任务时,需要确保远程服务器上的目录与脚本中的路径一致,以保证脚本能够正确地执行相关操作,比如上传文件到远程服务器、执行远程服务器上的脚本等。 ### 构建后操作 文档中提到了一个脚本`boot...
确保所有的依赖项都被正确地添加并按正确的顺序加载,以避免类加载问题。 3. **创建主类**:在Spring Boot项目中,主类是启动应用的入口点,通常包含`@SpringBootApplication`注解。我们需要创建这样一个类,并在...
4. **SpringBoot后端**:在后台,我们需要创建一个SpringBoot应用来接收前端发送的音频文件。SpringBoot是基于Spring框架的轻量级开发工具,简化了配置并提供了快速构建应用的能力。 5. **MultipartFile处理**:...
Spring Boot是Spring框架的一个子项目,它简化了Java应用的初始设置和配置,使开发者能够快速地创建独立运行的、生产级别的基于Spring的应用。通过内嵌Tomcat或Jetty等服务器,以及自动配置的特性,Spring Boot使得...
通过整合SpringBoot和Quartz,我们可以利用Spring的自动配置能力,方便地在Spring应用中集成定时任务功能。 二、Quartz动态配置 1. 引入依赖:首先,在`pom.xml`文件中引入SpringBoot的SpringBoot-starter-quartz...
- 通常通过查询系统中的Java进程,找出对应的SpringBoot应用并发送`SIGTERM`信号来优雅地停止服务。例如,可以使用`jps`找到应用进程ID,然后执行`kill -15 <PID>`。 5. **启动并停止脚本**: - 这个脚本可能结合...
在SpringBoot应用的引导阶段,`bootstrap`中的配置信息即开始生效。通常情况下,我们会在如Spring Cloud Config或Nacos等场景下使用`bootstrap`文件。值得注意的是,`bootstrap`文件内的属性是不可被覆盖的。 - **...
本文将深入探讨如何将一个SpringBoot应用打包为jar文件,并在Windows操作系统中实现自动部署,将其作为服务运行。 首先,我们需要了解SpringBoot的jar部署方式。SpringBoot的应用程序通常被打包为一个可执行的jar...
通过以上步骤,我们可以成功地在SpringBoot应用中整合Eureka,实现微服务之间的服务注册与发现。这只是一个基础的整合过程,实际应用中还需要考虑容错机制、监控、日志等更多复杂的场景。在深入学习微服务架构时,还...
本文将详细介绍如何使用Shell脚本来启动和停止Java服务,适用于包括SpringBoot在内的各种Java应用程序。 首先,让我们理解什么是Shell脚本。Shell脚本是Linux或Unix操作系统中的批处理程序,由一系列命令组成,可以...
- 内嵌Web服务器:如Tomcat或Jetty,允许快速地启动和停止应用程序,无需单独部署。 - Actuator:提供健康检查、监控、审计等运维功能,便于系统管理和维护。 - Starter POMs:预定义的Maven依赖集合,简化构建...