首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用dev-tools重启web服务器时,计划任务不会停止

使用dev-tools重启web服务器时,计划任务不会停止
EN

Stack Overflow用户
提问于 2019-02-07 00:40:00
回答 1查看 30关注 0票数 1

我有这个问题:

我正在安排一个任务每10分钟运行一次。当它运行时,我希望收到来自两个检查失败的两封电子邮件。

但是,当我编辑我的项目时,dev-tools会获取更改并重新启动spring应用程序。但问题是:我仍然会收到运行中的旧应用程序发来的电子邮件。

我可以做些什么来正确地终止应用程序?这个问题恐怕也会影响到生产环境。

代码:

代码语言:javascript
运行
复制
@Component
public 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>");
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-07 17:28:49

如果在Spring上实现java.io.Closeable,并从内部调用executor上的shutdown(),那么在销毁该bean时,CheckRunner将调用Closeable.close()。这将导致executor线程优雅地关闭。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54558479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档