首页 > 解决方案 > Spring Boot:我如何知道应用程序是否在 @PreDestroy 方法中被中断

问题描述

我有什么方法可以找出@PreDestroySpring Boot 应用程序中的方法是否因为CTRL-C被按下或被调用而kill <PID>被调用?

我想与应用程序定期停止的情况有所不同。(没有守护进程,没有 Web 服务器)

背景:

我将 Spring Boot 用作按计划在 Docker 容器中启动的 Runner。该应用程序可以正常工作并自行关闭。被调用kill <PID>时发生。docker stop <containerid>

标签: javaspringspring-boot

解决方案


您可以编写自己的方面来记录任何@PreDestroy执行

@Aspect
@Component
public class CustomAspect {

    @Around("@annotation(javax.annotation.PreDestroy)")
    public Object logPreDestroyExecution(ProceedingJoinPoint joinPoint) throws Throwable {
       // ...
       // get info from joinPoint and log
       // ...
       return joinPoint.proceed();
    } 
}

更详细的例子:Spring AOP + AspectJ


推荐阅读