Spring 应用开发注意事项
Laeni
2025-09-10
-
@Scheduled
和@Async
注解的异步方法在系统正常停止时不会等待其执行完毕后再停止。解决方案:
对于
@Scheduled
可以使用 Spring Boot 原生支持的配置明确指定:spring: task: scheduling: shutdown: # 关闭时等待所有任务执行完毕 await-termination: true # 注意: 必须要配置一个时间,否则不等待 await-termination-period: 180s
但上述方法并不适用于
@Async
注解的方法,对于@Async
注解的方法只能使用其他方式,比如注册一个应用关闭回调,在回调里检测@Async
任务的执行情况,当@Async
方法执行完毕后才让回调方法结束即可(回调方法是一定会等待其执行完毕后才会停机的)。