Spring boot 项目中如何优雅停止服务的五种方法,值得收藏!
在Spring Boot项目中优雅停止服务,通常指的是在关闭应用程序时能够处理完正在进行的任务、断开数据库连接、通知监控系统等。以下是五种优雅停止服务的方法:
- 使用
SpringApplication.exit()
退出
@SpringBootApplication
public class MyApp {
private static ConfigurableApplicationContext context;
public static void main(String[] args) {
context = SpringApplication.run(MyApp.class, args);
}
public static void exit() {
SpringApplication.exit(context, () -> 0);
context.close();
}
}
- 使用
@PreDestroy
注解
@Component
public class MyService {
@PreDestroy
public void onShutdown() {
// 执行清理工作
}
}
- 使用
DisposableBean
接口
@Component
public class MyService implements DisposableBean {
@Override
public void destroy() throws Exception {
// 执行清理工作
}
}
- 使用
CountDownLatch
@Component
public class GracefulShutdown {
private static final CountDownLatch latch = new CountDownLatch(1);
public void shutdown() {
try {
latch.await(); // 阻塞等待
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
public void stop(Runnable callback) {
callback.run(); // 执行清理工作
latch.countDown(); // 允许阻塞的线程继续
}
}
- 使用
ApplicationListener<ContextClosedEvent>
监听关闭事件
@Component
public class GracefulShutdownListener implements ApplicationListener<ContextClosedEvent> {
@Override
public void onApplicationEvent(ContextClosedEvent event) {
// 执行清理工作
}
}
以上方法可以根据实际需求选择使用,以实现优雅停止服务。
评论已关闭