我有这个问题:我正在安排每 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条经验 获得超2个赞
如果您在 bean 上实现java.io.Closeable
并CheckRunner
从其中调用shutdown()
executor,那么 Spring 将Closeable.close()
在 bean 被销毁时调用。这将导致您的执行程序线程优雅地关闭。
添加回答
举报
0/150
提交
取消