如何在play framework 2.3

时间:2015-08-24 09:24:18

标签: java mongodb playframework cron crontab

我使用的是Play 2.3.8(激活器)& Mongodb as db

我在产品系列中有一些产品,每个产品都有有效期,一旦到期,  我需要删除产品集合中的文档。

我计划编写cron作业来删除产品集合中的文档,这些文档将在特定时间内每天运行。

我认为我可以在java中使用像@ on,@ Everyvery这样的注释(我在play java中编写代码,而不是在scala中编写代码)。 但当我用Google搜索时,我得到了一些插件或工具或解决方案

a)https://github.com/ssachtleben/play-plugins/tree/master/cron

b)Quartz Job schedule作为依赖玩2.3(激活器)

c)Akka异步工作(我不知道如何使用它,如何使用游戏,甚至我是Akka的新手)

我处于困惑状态,你能不能在以下建议我

  1. 我可以根据我的要求使用哪一个?

  2. 我是否正确地开始工作?

  3. 有什么东西可以在数据库级别完成我的工作吗? 提前致谢。

2 个答案:

答案 0 :(得分:7)

这可以使用Global Class完成,并且可以使用onstart方法。 https://www.playframework.com/documentation/2.5.x/JavaGlobal

下面给出编码的抽象视图。希望这个帮助

public class Global extends GlobalSettings {

private Cancellable scheduler;

@Override
public void onStart(Application application) {
    int timeDelayFromAppStartToLogFirstLogInMs = 0;
    int timeGapBetweenMemoryLogsInMinutes = 10;
    scheduler = Akka.system().scheduler().schedule(Duration.create(timeDelayFromAppStartToLogFirstLogInMs, TimeUnit.MILLISECONDS),
            Duration.create(timeGapBetweenMemoryLogsInMinutes, TimeUnit.MINUTES),
            new Runnable() {
                @Override
                public void run() {
                    System.out.println("Cron Job");
                    // Call a function (to print JVM stats)
                }
            },
            Akka.system().dispatcher());
    super.onStart(application);
}

@Override
public void onStop(Application app) {
    scheduler.cancel();
    super.onStop(app);
}

}

答案 1 :(得分:2)

      Akka.system().scheduler().scheduleOnce(
          Duration.create(0, TimeUnit.MILLISECONDS),
          new Runnable() {
              public void run() {
                  Logger.info("ON START ---    " + System.currentTimeMillis());
              }
          },
          Akka.system().dispatcher()
  );

  Akka.system().scheduler().schedule(
          Duration.create(nextExecutionInSeconds(8, 0), TimeUnit.SECONDS),
          Duration.create(24, TimeUnit.HOURS),
          new Runnable() {
              @Override
              public void run() {
                  Logger.info("EVERY DAY AT 8:00 ---    " + System.currentTimeMillis());
              }
          },
          Akka.system().dispatcher()
  );

        Akka.system().scheduler().schedule(
                Duration.create(0, TimeUnit.MILLISECONDS), //Initial delay 0 milliseconds
                Duration.create(60, TimeUnit.SECONDS),     //Frequency 30 minutes
                new Runnable() {

                    @Override
                    public void run() {
                        Logger.info("creating the runnable");
                        Logger.info("EVERY 60 MInutes ---    " + System.currentTimeMillis());
                        executeAllMongoAggregations();
                    }
                },
                Akka.system().dispatcher()
        );

    }      Akka.system().scheduler().scheduleOnce(
          Duration.create(0, TimeUnit.MILLISECONDS),
          new Runnable() {
              public void run() {
                  Logger.info("ON START ---    " + System.currentTimeMillis());
              }
          },
          Akka.system().dispatcher()
  );

  Akka.system().scheduler().schedule(
          Duration.create(nextExecutionInSeconds(8, 0), TimeUnit.SECONDS),
          Duration.create(24, TimeUnit.HOURS),
          new Runnable() {
              @Override
              public void run() {
                  Logger.info("EVERY DAY AT 8:00 ---    " + System.currentTimeMillis());
              }
          },
          Akka.system().dispatcher()
  );

        Akka.system().scheduler().schedule(
                Duration.create(0, TimeUnit.MILLISECONDS), //Initial delay 0 milliseconds
                Duration.create(60, TimeUnit.SECONDS),     //Frequency 30 minutes
                new Runnable() {

                    @Override
                    public void run() {
                        Logger.info("creating the runnable");
                        Logger.info("EVERY 60 MInutes ---    " + System.currentTimeMillis());
                    }
                },
                Akka.system().dispatcher()
        );

    }