我们有一个Spring + JPA Web应用程序。 我们使用两个运行这两个应用程序并使用相同数据库的tomcat服务器。
我们的一个应用程序要求是执行cron \计划任务。
经过短暂的研究后,我们发现spring框架为cron作业提供了一个非常直接的解决方案, (基于注释的解决方案)
然而,由于两个tomcats运行相同的webapp - 如果我们将使用这个spring的解决方案,我们将创建一个非常有问题的场景,其中2个crons同时运行(每个tomcat在不同的tomcat上)
有什么方法可以解决这个问题吗?也许这个替代方案对我们的目的不利?
谢谢!
答案 0 :(得分:5)
作为一般规则,您将要保存设置以指示作业正在运行。类似于“Spring Batch”的技巧,您可能希望在数据库中创建一个表来存储作业执行。您可以根据需要选择实现此目的,但最终,您的计划任务应检查数据库以查看是否已在运行相同的任务,如果没有,则继续执行任务。任务完成后,适当更新数据库,以便将来执行。
答案 1 :(得分:-1)
@kungfuters解决方案肯定是一个更好的最终目标,但作为一个简单的第一个实现,您可以使用属性来启用/禁用任务,并且只在其中一个服务器上运行任务。