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方法执行完毕后才让回调方法结束即可(回调方法是一定会等待其执行完毕后才会停机的)。