【发布时间】:2020-03-24 19:06:55
【问题描述】:
我正在开发一个 Spring Boot 应用程序,该应用程序在给定网站中查找给定的keywords,如果找到匹配项,则将网页报废。我正在编写一个 cron 作业,每 5 分钟刷新一次结果,如下所示:
@Scheduled(cron = "* */5 * * * *")
public void fetchLatestResults() throws Exception {
LOG.debug("Fetching latest results >>>");
List<Keyword> keywords = keywordService.findOldestSearched10();
keywordService.updateLastSearchDate(keywords);
searchResultService.fetchLatestResults(keywords);
LOG.debug("<<< Latest results fetched");
}
数据库有 100 个keywords,在 cron 作业中,我首先列出最后一次获取结果的最旧的 10 个关键字。因此,例如,第一次运行应使用 ID 为 1 到 10 的 keywords,第二次运行应使用 ids 11 到 20,依此类推,第 11 次运行应再次使用 ids 1 到 10,然后进程继续。
现在,问题是执行搜索需要的时间远远超过 5 分钟。因此,尽管我已将 cron 作业设置为每 5 分钟运行一次,但在第一次运行完成之前不会进行第二次运行。因此,完成搜索需要几个小时。如何使这个进程成为多线程的,以便 cron 作业的多个实例可以同时运行,因为它们在 keywords 的不同列表上运行?
【问题讨论】:
标签: java multithreading spring-boot cron