如何优雅的停止SpringBoot服务( 二 )

第五种方法 , 自己写一个Controller , 然后将自己写好的Controller获取到程序的context , 然后调用自己配置的Controller方法退出程序 。 通过调用自己写的/shutDownContext方法关闭程序:curl -X POST http://localhost:3333/shutDownContext 。
package com.hqs.springboot.shutdowndemo.controller;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.context.ConfigurableApplicationContext;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController;@RestControllerpublicclassShutDownControllerimplementsApplicationContextAware{privateApplicationContext context;@PostMapping("/shutDownContext")publicString shutDownContext() {ConfigurableApplicationContext ctx = (ConfigurableApplicationContext) context;ctx.close();return"context is shutdown";}@GetMapping("/")publicString getIndex() {return"OK";}@Overridepublicvoid setApplicationContext(ApplicationContext applicationContext) throwsBeansException{context = applicationContext;}}好了 , SpringBoot的优雅关闭方法也都实现好了 , 也有同学问 , 如何暴力停止呢 , 简单 , 直接kill -9 相应的PID即可 。
总结一下:【如何优雅的停止SpringBoot服务】以上这几种方法实现的话比较简单 , 但是真实工作中还需要考虑的点还很多 , 比如需要保护暴露的点不被别人利用 , 一般要加一些防火墙 , 或者只在内网使用 , 保证程序安全 。 整编:微信公众号 , 搜云库技术团队 , ID:souyunku
在真实的工作中的时候第三种比较常用 , 程序中一般使用内存队列或线程池的时候最好要优雅的关机 , 将内存队列没有处理的保存起来或线程池中没处理完的程序处理完 。 但是因为停机的时候比较快 , 所以停服务的时候最好不要处理大量的数据操作 , 这样会影响程序停止 。
原文链接: