내가 초기 단계에서 밟은 함정 (스프링 부츠 1.x)
1. Mavne 의존성을 추가하십시오
<!-SpringBoot 모니터링-> <pectionement> <groupId> org.springframework.boot </groupid> <artifactid> Spring-Boot-Starter-Actuator </artifactid> </fectionency>
2. 종료 활성화
다음 구성 파일을 추가하십시오
#enable HTTP 셧다운 엔드 포인트 엔드 포인트 엔드 포인트 엔드 포인트 엔드 포인트 엔드 포인트 엔드 포인트 endpoint.enabled = true#endpoints.shutdown.sensitive = false를 확인할 필요가 없습니다.
시작시 다음 로그를 볼 수 있습니다.
3. 우아한 셧다운
게시물 요청 http : // localhost : 8080/shutdown을 보내십시오
응답 코드가 404 인 경우 http : // localhost : 8080/actuator/shutdown을 시도해 볼 수 있습니다.
스프링 부츠 2.0
사용중인 Spring Boot 버전이 2.x 인 경우이 게시물 요청은 404의 결과를 얻을 수 있습니다.
Spring Boot 2.0 Elegant 가동 중지 시간이 구현되는 방법은 다음과 같습니다.
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 servletweberfactory servletcontainer () {tomcatservletwebserverfactory tomcat = new tomcatservletwebserverfactory (); tomcat.addConnectorCustomizers (Gracefulshutdown ()); 반환 Tomcat; } /*** 스프링 부팅을 우아하게 닫습니다. 컨테이너는 tomcat */ private class gracefulshutdown을 구현해야합니다. tomcatconnectorCustomizer, applicationListener <contextclosedevent> {private final logger log = loggerfactory.getLogger (Gracefulshutdown.class); 개인 휘발성 커넥터 커넥터; 개인 최종 int waittime = 10; @override public void customize (커넥터 커넥터) {this.connector = 커넥터; } @override public void onapplicationEvent (contextclosedEvent contextclosedEvent) {this.connector.pause (); Executor Executor = this.connector.getProtocolHandler (). getExecutor (); if (ThreadPooleExecutor의 Executor Instance) {try {ThreadPoolexecutor ThreadPoolexecutor = (ThreadPoolexecutor) Executor; ThreadPoolExecutor.shutdown (); if (! ThreadPoolexecutor.awaittermination (Waittime, TimeUnit.seconds))) {log.warn ( "Tomcat 프로세스" + Waittime + "Secons에서 끝날 수 없습니다. }} catch (InterpruptedException ex) {thread.currentthread (). interprupt (); }}}}}}}}}}}}}}Undertow 컨테이너 (사용되지 않음, 사용 가능하지 않음)
@SpringBootApplicationPublic Class Application {public static void main (String [] args) {springApplication.run (application.class, args); } / ** * 우아함 * / @Component 공개 클래스 GracefulShutdown 구현 ApplicationListener <CERTXTCLOSEDEVENT> {@autowired private gracefulshutdownWrapper gracefulshutdownWrapper; @autowired private servletwebserApplicationContext 컨텍스트; @override public void onapplicationEvent (contextclosedEvent contextclosedEvent) {GracefulshutdownWrapper.getGracefulshutdownHandler (). shutdown (); try {hatingservletwebserver webserver = (jourdingervletwebserver) context.getwebserver (); 필드 필드 = webserver.getClass (). getDeclaredfield ( "Undertow"); field.setAccessible (true); Undertow Undertow = (Undertow) field.get (웹 서버); list <aUdittow.listenerInfo> LeargerInfo = invertow.getListenerInfo (); Zitsow.listenerInfo Listener = ListenerInfo.get (0); ConnectorStatistics ConnectorStatistics = Listener.GetConnectorStatistics (); while (connectorStatistics.getActiveConnection ()> 0) {}} catch (예외 e) {// 응용 프로그램 종료}}} @component public class gracefulshutdownwrapper implements handlerWrapper {private gracefulshutdownler gracefulshutdownhandler; @override public httphandler 랩 (httphandler handler) {if (gracefulshutdownhandler == null) {this.gracefulshutdownhandler = new GracefulshutdownHandler (handler); } return gracefulshutdownhandler; } public gracefulshutdownhandler getgracefulshutdownhandler () {return gracefulshutdownhandler; }} @component @allargsconstructor public class jourdextraconfiguration {private final gracefulshutdownwrapper gracefulshutdownwrapper; @bean public abortorservletwebserfactory servletwebserverfactory () {jourdingervletwebserfactory factory = new UndervletwebserVerfactory (); Factory.AddDeploymentInfocustomizers (deploymentInfo-> deploymentInfo.AdDouterHandlerCainWrapper (GraceFulsHutdownWrapper)); Factory.addBuilderCustomizers (Builder-> Builder.setServeroption (Zistowoptions.enable_statistics, true)); 반품 공장; }}}2. 킬 명령을 사용하여 프로세스를 죽입니다
다음 명령을 사용하여 프로세스를 죽입니다. 이 명령은 종단 신호를 프로세스에 보냅니다.
킬 -15 [PID]
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.