Подводные камни, на которые я наступил на ранней стадии (Spring Boot 1.x)
1. Добавить зависимости Mavne
<!-Мониторинг Springboot-> <Dependency> <groupId> org.springframework.boot </GroupId> <artifactid> Spring-boot-starter-actuator </artifactid> </depertive>
2. Включить выключение
Добавить следующий файл конфигурации
#Enable http access of andpoint конечной точки конечной точки конечной точки конечной точки конечной точки конечной точки
Вы можете увидеть следующий журнал при запуске, что означает, что он успешно
3. Элегантное отключение
Отправить запрос сообщения http: // localhost: 8080/
Если код ответа равен 404, вы можете попробовать поступить http: // localhost: 8080/arcuator/
Spring Boot 2.0
Если версия Spring Boot, которую вы используете, будет 2.x, вы обнаружите, что эти запросы Post будут иметь результат 404.
Вот как реализуется элегантное время простоя Spring Boot 2.0.
1. Изменить класс запуска приложения
Контейнер Tomcat
@Springbootapplicationpublic class shutdownapplication {public static void main (string [] args) {springapplication.run (shutdownapplication.class, args); } / *** используется для принятия событий выключения* / @bean public gracefulShutdown GracefulShutdown () {return new GracefulShutdown (); } / ** * Настроить Tomcat * * @return * / @bean public servletwebserverfactory servletcontainer () {tomcatservletwebserverfactory tomcat = new tomcatservletwebserverfactory (); tomcat.addconnectorcustomizers (GracefulShutdown ()); вернуть Tomcat; } /*** Заклинание пружины изящно. Контейнер должен быть Tomcat */ Private Class GracefulShutdown реализует TomcatConnectorCustomizer, ApplicationListener <StextColosedEvent> {Private Final Logger log = loggerFactory.getLogger (GracefulShutdown.class); частный летучий разъем соединителя; Приватный финальный int waltime = 10; @Override public void настройка (соединитель Connector) {this.connector = connector; } @Override public void onApplicationEvent (contextcolosedEvent contextcolosedevent) {this.connector.pause (); Исполнитель Исполнитель = this.connector.getProtocolHandler (). GetExeCutor (); if (экземпляр Executor threadPoolexeCutor) {try {threadPoolexeCutor ThreadPoolexeCutor = (ThreadPoolexeCutor) Исполнитель; threadpoolexecutor.shutdown (); if (! threadpoolexecutor.awaittermination (wailtime, timeUnit.seconds)) {log.warn ("Процесс Tomcat не может заканчиваться в" + wailtime + ", попытаться заставить конец"); }} catch (прерывание Exception ex) {thread.currentThread (). Enterrupt (); }}}}}}}}}}}}Контейнер с поднятой (не используется, не гарантированно будет доступен)
@SpringBootApplicationPublic Class Application {public static void main (String [] args) {SpringApplication.Run (Application.Class, Args); } / ** * Закрыть Spring Boot Eleganty * / @component public Class GracefulShutdown реализует ApplicationListener <StextColosEvent> {@Autowired Private GracefulShutWrapper GracefulShutWrapper; @Autowired private servletwebserverapplication context; @Override public void onApplicationEvent (contextcolosedEvent contextcolosedEvent) {GracefulShutDownWrapper.getGracefulShutDownHandler (). Shutdown (); try {entertowservletwebserver webserver = (entertowservletwebserver) context.getWebserver (); Field Field = webserver.getClass (). GetDeclaredfield ("inceplow"); Field.SetAccessible (true); Щипник adpertow = (encetow) field.get (webserver); List <depertow.listenerinfo> ListenerInfo = adpertow.getListenerInfo (); Adpertow.listenerinfo alluster = listenerinfo.get (0); ConnectorStatistics ConnectorStatistics = Слушатель.getConnectorStatistics (); while (connectorStatistics.getActiveConnections ()> 0) {}} catch (Exception e) {// whutdown}}} @component public class GracefulShutWrapper реализует handlerWrapper {private GracefulShutdownhandler GracefulShutDownHandler; @Override public httphandler wrap (httphandler handler) {if (GracefulShutdownhandler == null) {this.gracefulshutdownhandler = new GracefulShutdownhandler (обработчик); } вернуть GracefulShutdownhandler; } public GracefulShutdownhandler getGracefulShutDownHandler () {return GracefulShutDownHandler; }} @Component @allargsconstructor public class actortowextraconfiguration {private final finalshutshutWrapper GracefulShutDownWrapper; @Bean public intertowservletwebserverfactory servletwebserverfactory () {intertowservletwebserverfactory factory = new IntertowservletwebserverFactory (); factory.adddeploymentinfocustomizers (deploymentinfo -> deploymentinfo.addouterhandlerchainwrapper (GracefulShutDownWrapper)); factory.addbuilderCustomizers (Builder -> Builder.setserVeroption (BeartowOptions.enable_statistics, true)); вернуть фабрику; }}}2. Используйте команду убийства, чтобы убить процесс
Используйте следующую команду, чтобы убить процесс. Эта команда отправляет сигнал завершения в процесс.
Убить -15 [PID]
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.