亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spring Boot - 如何為非 GUI 應用程序注冊關閉掛鉤

Spring Boot - 如何為非 GUI 應用程序注冊關閉掛鉤

慕勒3428872 2021-11-24 20:14:47
我正在開發一個應用程序,它基本上是一個將使用命令行運行的服務。我確實在config文件中有一個選項可以顯示GUI. 如果用戶選擇讓它顯示窗口,那么我可以shutdown()使用WindowClosing來自 Swing的事件或關閉按鈕調用我的方法。但是,如果用戶選擇 no-GUI 選項,我不確定如何確保在命令提示符下按 Control-C 時調用此方法。我的shutdown()方法更新數據庫中的一些重要數據并停止線程,所以我需要它運行。我做了一些研究并嘗試過這樣的事情:public static void main(String args[]) {    //Look and Feel Initialization    try     {        for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels())         {            if ("Nimbus".equals(info.getName()))             {                javax.swing.UIManager.setLookAndFeel(info.getClassName());                break;            }        }    }     catch (ClassNotFoundException | IllegalAccessException | InstantiationException | UnsupportedLookAndFeelException ex)     {        logger.error("Error initializing look and feel : " + ex.getMessage());    }     //Application Initialization    SpringApplication application = new SpringApplication(MDHIS_Service.class);    application.addListeners((ApplicationListener<ContextClosedEvent>) (ContextClosedEvent e) ->     {        shutdown();    });    application.run(args);}問題是我的shutdown()方法遠非靜態。我不知道如何將它連接到 Spring Boot 上下文中,讓它在停止之前運行這個方法。我嘗試了@PreDestroy注釋,但它沒有按預期運行該方法。任何幫助,將不勝感激。
查看完整描述

2 回答

?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

經過更多研究,我最終實現了 SmartLifecycle 接口。我的getPhase()方法返回Integer.MAX_VALUE;,這意味著首先銷毀 bean。然后可以使用 stop 方法調用清理代碼并確保任何日志記錄/其他數據庫訪問 bean 仍然有效。


查看完整回答
反對 回復 2021-11-24
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

請參閱運行時 API以注冊關閉掛鉤 - 基本上使用 Thread 在 JVM 終止時調用方法(通常或通過 CTRL + C 等中斷)。


在這種情況下,它看起來像是shutdown()定義了的類中的靜態方法main(),所以是這樣的:


public static void main(String args[]) {

    ...

    if (using command line) {

        Runtime.getRuntime().addShutdownHook(new Thread( () -> shutdown() ));

    }

}

關于@PreDestroy 的使用,這個類似的問題也可能有所幫助。


查看完整回答
反對 回復 2021-11-24
  • 2 回答
  • 0 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號