springboot项目优雅的停止服务
springboot项目在启动的时候,使用java -jar styy_auth_server.jar
比如我自己在公司测试服务器上写的启动文件start.sh
#!/bin/sh
nohup java -jar styy_auth_server.jar 2>&1 > styy_auth_server.out &
每次启动后,比如要更新下服务代码,就要停止服务,
每次我都是这样操作的,kill -9 xxx
很麻烦,,,,,,,
所以今天在浏览csdn的时候发现别的大佬写了个优雅的关闭springboot我也试了试。。。效果很不错\(^o^)/
步骤:
1.在maven中先添加actuator的引用
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2.在springboot的全局配置文件application.yml 中添加
management:endpoint:shutdown:enabled: true #启用shutdownendpoints:web:exposure:include: "*"base-path: /MyActuator # 自定义管理端点的前缀(保证安全)server:port: 12888address: 127.0.0.1 # 不允许远程管理连接(不允许外部调用保证安全)
3.在springboot的主启动函数类中添加tomcat的的停机支持
package smartt.styy.auth;import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.connector.Connector;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;import org.springframework.context.event.ContextClosedEvent;
import smartt.styy.auth.filter.HttpServletRequestReplacedFilter;import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;/*** @author shangtengfei* 启动方法 ,入口*/
@SpringBootApplication
@ServletComponentScan
@MapperScan("smartt.styy.auth.mapper")
@Slf4j
public class AuthSpringBootApplication
{public static void main( String[] args ){SpringApplication.run(AuthSpringBootApplication.class, args);}/*** 9 * 用于接受 shutdown 事件* 10*/@Beanpublic GracefulShutdown gracefulShutdown() {return new GracefulShutdown();}@Beanpublic ServletWebServerFactory servletContainer() {TomcatServletWebServerFactory tomcatServletWebServerFactory = new TomcatServletWebServerFactory();tomcatServletWebServerFactory.addConnectorCustomizers(gracefulShutdown());return tomcatServletWebServerFactory;}private class GracefulShutdown implements TomcatConnectorCustomizer, ApplicationListener<ContextClosedEvent> {private volatile Connector connector;private final int waitTime = 10;@Overridepublic void customize(Connector connector) {this.connector = connector;}@Overridepublic void onApplicationEvent(ContextClosedEvent contextClosedEvent) {this.connector.pause();Executor executor = this.connector.getProtocolHandler().getExecutor();try {if (executor instanceof ThreadPoolExecutor) {ThreadPoolExecutor threadPoolExecutor = (ThreadPoolExecutor) executor;threadPoolExecutor.shutdown();if (!threadPoolExecutor.awaitTermination(waitTime, TimeUnit.SECONDS)) {log.warn("Tomcat 进程在" + waitTime + " 秒内无法结束,尝试强制结束");}}} catch (Exception e) {e.printStackTrace();Thread.currentThread().interrupt();}}}}
4.在postman中测试。添加完后。。。启动测试
注意:
记住一定是post提交, url为127.0.0.1:12888\MyActuator\shutdown,此时idea里面的项目就停止了。。。
5.编写linux的停止文件shutdown.sh ,对照自己的测试服务器进行相应的修改
curl -X POST 192.168.55.242(ip):12888(端口)/MyActuator/shutdown
基本操作我们就做完了,,,,但是有个问题,别人要是通过扫描工具扫描到了,把我们服务停了怎么办,,,,,
安全认证待续。。。。
springboot项目优雅的停止服务相关推荐
- springboot项目:家庭整理服务管理系统39774(java+VUE+Mybatis+Maven+Mysql)
springboot项目:家庭整理服务管理系统39774(java+VUE+Mybatis+Maven+Mysql) 一.项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + ...
- spring-boot项目优雅的http客户端工具,太香了!
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:https://juejin.im/post/6854573 ...
- springboot 脚本启动、停止服务
启动服务:#!/bin/bash CPU_COUNT=`cat /proc/cpuinfo | grep processor | wc -l`MEM_OPTS="-Xms1024m -Xmx ...
- ShutdownHook - java中优雅地停止服务
1.什么是ShutdownHook 在Java程序中可以通过添加关闭钩子,实现在程序退出时关闭资源.平滑退出的功能. 使用Runtime.addShutdownHook(Thread hook)方法, ...
- JDK ShutdownHook - 优雅地停止服务
一.什么是ShutdownHook? 在Java程序中可以通过添加关闭钩子,实现在程序退出时关闭资源.平滑退出的功能. 使用Runtime.addShutdownHook(Thread hook)方 ...
- 阿里云 Java发布SpringBoot项目,使用邮件服务发送失败原因整理
查了很多失败原因大致有一下几点: 使用了25端口,阿里云默认是禁用掉25端口的,看看能否通 解决办法:代码配置中指定为465端口 telnet smtp.163.com 25 2.使用465端口,依旧 ...
- OAuth2.0 社交登录-Gitee springboot项目整合(微服务分布式)完整代码包括 数据库、前、后端
文章目录 社交登录(Gitee) 1.模拟请求 项目整合 1.数据库增加字段 2.前端 2.后端 社交登录(Gitee) 完成这个踩了很多坑,包括第一时间忘了浏览器缓存这回事以及微博一些平台申请社交登 ...
- SpringBoot 项目优雅实现 Excel 导入导出功能
背景 Excel 导入与导出是项目中经常用到的功能,在 Java 中常用 poi 实现 Excel 的导入与导出.由于 poi 占用内存较大,在高并发下很容易发生 OOM 或者频繁 fullgc,阿里 ...
- 关于webservice服务在springboot项目中的开发的介绍
在springboot项目中搭建webservice服务端及使用客户端进行请求的介绍 一.引包 二.搭建webservice服务 (一)使用CXF搭建webservice服务 (二)webservic ...
最新文章
- 什么时候用var关键字
- eslint 无法格式化ts_vscode-eslint的踩坑实践--typescript无法格式化
- python六十一: __module__属性
- wxWidgets:wxModalDialogHook类用法
- 【简便代码+解析】1056 组合数的和 (15分)_14行代码AC
- 第十二周学习进度总结
- 如何评价一个开源项目——协作影响力
- 前端学习(2488):使用git获取代码
- 树莓派使用STEP1:装系统
- Python(17)-元组tuple
- 【安全风险通告】Apache ShardingSphere远程代码执行漏洞安全风险通告
- k8s-configmap 挂载使用
- springBoot于tomcat7搭建websocket服务
- python训练聊天机器人词库_Python实现聊天机器人的示例代码
- c语言程序软件下载,C语言下载_C语言官方下载【C语言编程软件】-太平洋下载中心...
- Java我的世界forge安装失败,我的世界forge安装失败install怎么办
- 小程序 login获取出错: 40125, errmsg: invalid appSecret
- 20172301 2017-2018-2 《程序设计与数据结构》第八周学习总结
- NYOJ 234 吃土豆(基础dp)
- numpy_flatten函数
热门文章
- 赵丽颖明星人物介绍html源码 html期末大作业 课程设计
- Sonar Scanner 分析参数:即如何配置sonar-project.properties文件
- Java8新特性【函数式编程API、新时间日期处理API、Optional容器类】总结
- 「镁客·请讲」华科创智喻东旭:纳米银线最终将带来移动终端的革命
- C#中foreach用法总结
- 奔驰官宣明年释放“过渡版”L3,允许激活≠安全可靠
- leetcode 5-最长回文子串(中心扩展算法)
- 弘辽科技:开网店怎么找厂家合作?如何搜索厂家?
- C# 主窗体Load事件、Shown事件、Activated事件 区别
- ES6形式常用的数组遍历函数