我正在为java-application寻找一个简单的cron类型解决方案。
我查看了cron4j,您可以在其中设置执行方法,例如每5分钟一次。
只有,我有一个自定义要求,如果之前的方法调用仍然在运行,它应该不启动另一个同时调用,但只是跳过该调用并在5分钟内再试一次,等等 - - 即我想确保永远不会为同一个作业并行运行2个线程。只有先前的方法调用已经完成,才应该重新启动。
在Java中实现此要求的最简单/最稳定的方法是什么? (如果有更好的方法,则不一定是cron4j)
答案 0 :(得分:0)
我更喜欢Cron4j,因为我相信它轻巧且易于使用。所以我会使用应用程序范围的方法来执行此同步。
例如,如果您的应用程序是分发的,那么您的作业详细信息必须存储在某个共享存储上,比如数据库中。然后,在此数据库中,您可以设置一个标志(即每个作业详细信息的列值),以指示此作业是否已在执行。然后,下一个执行时间(即另一个列值,我发现有一个列持有下一个执行标志非常有用,你应该试一试,如果你还没有)应该通过添加你喜欢的任何偏移来修改。
如果您的应用程序未分发,则可以轻松使用同步静态方法或静态ReentrantLock实例来控制同步。