簡體   English   中英

我的應用程序停止時該如何捕捉?

[英]How can I catch when my application stops?

我有一個spring-boot應用程序,正在使用石英創建作業。 我像./bin/app start這樣運行我的應用程序,當我的應用程序停止時,我需要趕上實現Job的類: ./bin/app stop有人知道我該怎么做嗎? 我嘗試使用方法destroy()實現DisposableBean ,但不起作用。 我的主要班級是這樣的:

public class Main implements CommandLineRunner {
    public static void main(String[] args) throws Exception {
       .....

Quartz創建作業,然后在我的作業中創建一個變量“ lock”,如下所示:

public class MyJob implements Job, DisposableBean {
private RLock lock = redissonClient.getFairLock(jobName);
    .....

    @Override
    public void destroy() throws Exception {
        if(lock != null) {
            lock.forceUnlock();
        }
    }

當我的應用程序在執行過程中停止時,我需要強制解鎖,因此我需要在MyJob類而不是Main類中捕獲停止。 先感謝您!!

您應該能夠將事件觀察器附加到應用程序上下文,例如:

  public class MyJob implements Job, DisposableBean {

      public MyJob(ApplicationContext context) {
        ((ConfigurableApplicationContext)context).addApplicationListener(
           (ContextClosedEvent event) -> onContextClosed()
        );
      }

      private void onContextClosed() {
         ...
      }
  }

使用@PreDestroy批注。 @PreDestroy注釋要在停止時執行的方法。

@PreDestroy
public void onExit() {
   //STOP FROM THE LIFECYCLE
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM