使用Redis在Java / Scala中持久调度作业

时间:2013-07-04 11:20:56

标签: java scala redis playframework-2.0

Akka Scheduler很棒,但缺乏持久性。

有持久性的作业调度是否有任何好的解决方案?最好是Redis。

6 个答案:

答案 0 :(得分:2)

我所知道的最佳调度程序之一是Quartz。用Java编写,但我们在Scala项目中与Akka一起使用

答案 1 :(得分:0)

Java Quartz是一个很好的调度选项,并且具有可用于持久性的Jobstore API。这是一个很好的阅读http://www.ibm.com/developerworks/java/library/j-quartz/

答案 2 :(得分:0)

这是我最近编写的一个小型Java库,用于处理使用Redis作为后端的分布式任务调度:https://github.com/davidmarquis/redis-scheduler

这很简单,但应该让你很快开始。它不会持久保存您的工作数据,但会在合适的时间触发您的工作。此外,如果您有多个应用程序实例,则将在单个实例上执行作业。

答案 3 :(得分:0)

我们已经成功使用Quartz和Java成功了一段时间,最近添加了redis backend

免责声明:我参与了redis-quartz的设计。截至目前,redis-quartz仍处于测试阶段。

答案 4 :(得分:0)

我知道你的问题是关于Redis的,但我刚刚遇到了Akka-Scheduling的Akka,我觉得它会很有用。

您可以使用具有一定持久性的Akka调度程序。

答案 5 :(得分:0)

我建议你试试Redisson。它允许通常的java.lang.Runnablejava.util.concurrent.Callable接口。这是代码示例:

RScheduledExecutorService executorService = redisson.getExecutorService("myExecutor");
ScheduledFuture<?> future = executorService.schedule(new CallableTask(), 10, 20, TimeUnit.MINUTES);

future.get();
// or cancel it
future.cancel(true);

cron表达式的示例:

executorService.schedule(new RunnableTask(), CronSchedule.of("10 0/5 * * * ?"));

executorService.schedule(new RunnableTask(), CronSchedule.dailyAtHourAndMinute(10, 5));

executorService.schedule(new RunnableTask(), CronSchedule.weeklyOnDayAndHourAndMinute(12, 4, Calendar.MONDAY, Calendar.FRIDAY));