Graceful shutdown là chế độ khi nhận tín hiệu dừng (SIGTERM), web server ngừng nhận request mới nhưng vẫn cho các request đang xử lý chạy hết trong một khoảng ân hạn rồi mới tắt.
Không có nó, container bị kill giữa chừng sẽ trả lỗi cho các request đang dở — vấn đề hay gặp khi deploy rolling update trên Kubernetes.
properties
# Spring Boot 2.3 - 3.3: must be turned on explicitly
server.shutdown=graceful
# grace period for in-flight requests
spring.lifecycle.timeout-per-shutdown-phase=30s- Từ Spring Boot 3.4 graceful shutdown đã bật mặc định; muốn quay về hành vi cũ thì đặt
server.shutdown=immediate. - Tomcat, Jetty và Reactor Netty ngừng nhận kết nối ở tầng network.
- Hết
timeout-per-shutdown-phasemà request chưa xong thì server tắt luôn.
Muốn chạy đúng trên Kubernetes thì terminationGracePeriodSeconds của pod phải lớn hơn giá trị timeout này, nếu không kubelet sẽ SIGKILL trước khi app kịp dọn.