我有這個問題:我正在安排每 10 分鐘運行一次的任務。當它運行時,我預計會收到兩封來自兩次檢查失敗的電子郵件。但是,當我編輯我的項目時,開發工具會獲取更改并重新啟動 spring 應用程序。但問題是:我仍然收到來自正在運行的舊應用程序的電子郵件。我該怎么做才能正確終止應用程序?恐怕這個問題也會影響到生產環境。代碼:@Componentpublic class CheckRunner implements Runnable { private static final Logger log = LoggerFactory.getLogger(CheckRunner.class); private static boolean runOnce = true; private final long DEFAULT_CHECKING_INITIAL = 1L; private final long DEFAULT_CHECKING_PERIOD = 10L; @Autowired public EmailServiceImpl emailService; /** * Construct and schedule a CheckRunner */ public CheckRunner() { if(runOnce) { runOnce = false; log.info("Starting check runner."); ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor(); exec.scheduleAtFixedRate(this, DEFAULT_CHECKING_INITIAL , DEFAULT_CHECKING_PERIOD, TimeUnit.MINUTES); } } /** * Run the checks once */ @Override public void run() { log.info("Checking thread running."); checks(); } /** * Do the checks */ private void checks() { StringBuilder sb = new StringBuilder(); //sb.append("<pre>"); WebServerAvailablityCheck.runAllChecks(sb, emailService); //sb.append("</pre>"); }}
1 回答

DIEA
TA貢獻1820條經驗 獲得超3個贊
如果您在 bean 上實現java.io.Closeable
并CheckRunner
從其中調用shutdown()
executor,那么 Spring 將Closeable.close()
在 bean 被銷毀時調用。這將導致您的執行程序線程優雅地關閉。
添加回答
舉報
0/150
提交
取消