Environment

  • spring boot: 3.0.2
  • jdk: Temurin-17.0.5+8 (build 17.0.5+8)
  • web server: webflux (netty)

Situation

I configured graceful shutdown and timeout.

spring:
  lifecycle:
    timeout-per-shutdown-phase: 90s

server:
  shutdown: graceful

And sent signal SIGTERM to java process, but NPE occurred. Here is stack trace.

java.lang.NullPointerException: Cannot invoke "java.lang.Thread.interrupt()" because "this.shutdownThread" is null
  at org.springframework.boot.web.embedded.netty.GracefulShutdown.abort(GracefulShutdown.java:81)
  at org.springframework.boot.web.embedded.netty.NettyWebServer.stop(NettyWebServer.java:193)
  at org.springframework.boot.web.reactive.context.WebServerManager.stop(WebServerManager.java:65)
  at org.springframework.boot.web.reactive.context.WebServerStartStopLifecycle.stop(WebServerStartStopLifecycle.java:48)
  at org.springframework.context.SmartLifecycle.stop(SmartLifecycle.java:117)
  at org.springframework.context.support.DefaultLifecycleProcessor.doStop(DefaultLifecycleProcessor.java:234)
  at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.stop(DefaultLifecycleProcessor.java:373)
  at org.springframework.context.support.DefaultLifecycleProcessor.stopBeans(DefaultLifecycleProcessor.java:206)
  at org.springframework.context.support.DefaultLifecycleProcessor.onClose(DefaultLifecycleProcessor.java:129)
  at org.springframework.context.support.AbstractApplicationContext.doClose(AbstractApplicationContext.java:1043)
  at org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext.doClose(ReactiveWebServerApplicationContext.java:149)
  at org.springframework.context.support.AbstractApplicationContext.close(AbstractApplicationContext.java:1001)
  at org.springframework.boot.SpringApplicationShutdownHook.closeAndWait(SpringApplicationShutdownHook.java:139)
  at java.base/java.lang.Iterable.forEach(Iterable.java:75)
  at org.springframework.boot.SpringApplicationShutdownHook.run(SpringApplicationShutdownHook.java:108)
  at java.base/java.lang.Thread.run(Thread.java:833)

This situation is very rare, but this issue may be need to fix.

Comment From: mhalbritter

Thanks for the report, should be an easy fix.

Comment From: giger85

@mhalbritter Thanks!