任务调度

任务调度支持是ActFramework的一项很棒的功能,你可以用一种前所未有的简洁方式来进行任务调度,只需要在没有返回类型和参数类型的方法上使用不同的注解制定任务触发条件即可。方法可以是静态的或者虚方法。

定期运行

  1. import act.job.Every;
  2. public class Foo {
  3. @Every("1d")
  4. public void runEveryOneDay() {
  5. ...
  6. }
  7. @Every("3h")
  8. public void runEveryThreeHours() {
  9. ...
  10. }
  11. @Every("5mn")
  12. public void runEveryFiveMinutes() {
  13. ...
  14. }
  15. @Every("10s")
  16. public void runEveryTenSeconds() {
  17. ...
  18. }
  19. @Every
  20. public void runEverySecond() {
  21. ...
  22. }
  23. }

固定间隔运行

  1. import act.job.FixedDelay;
  2. public class Foo {
  3. @FixedDelay("40mn")
  4. public void scheduledToRunFourtyMinsAfterLastRunFinished() {
  5. ...
  6. }
  7. }

Cron调度

  1. import act.job.Cron;
  2. public class Foo {
  3. @Cron("0 0 0/12 * * ?")
  4. public void runEvery12Hours() {
  5. ...
  6. }
  7. @Cron("cron.password_reminder.scan")
  8. public void runPerConfiguredCrontab() {
  9. ...
  10. }
  11. }

和其他任务联动执行

  1. package com.mycom.myrpj;
  2. import act.job.*;
  3. public class Foo {
  4. @Every("5s")
  5. public void jobA() {
  6. ...
  7. }
  8. @AlongWith("com.mycom.myrpj.Foo.jobA")
  9. public void asyncInvokeAlongWithJobA() {
  10. ...
  11. }
  12. @InvokeBefore("com.mycom.myrpj.Foo.jobA")
  13. public void invokeBeforeJobA() {
  14. ...
  15. }
  16. @InvokeAfter("com.mycom.myrpj.Foo.jobA")
  17. public void invokeAfterJobA() {
  18. ...
  19. }
  20. }

处理应用程序事件

  1. import act.job.*;
  2. import act.app.event.*;
  3. public class Foo {
  4. @OnAppStart
  5. public void invokeAfterApplicationStarted() {
  6. ...
  7. }
  8. @OnAppStart(async = true)
  9. public void asyncInvokeAfterApplicationStarted() {
  10. ...
  11. }
  12. @OnAppEvent(AppEventId.CONFIG_LOADED)
  13. public void invokeOnAppEvent() {
  14. ...
  15. }
  16. @OnAppEvent(value = AppEventId.CLASS_LOADED, async = true)
  17. public void asyncInvokeOnAppEvent() {
  18. ...
  19. }
  20. }

通过API调度任务

  1. @GetAction
  2. public void home(@Context AppJobManager jobManager) {
  3. jobManager.now(new Runnable() {
  4. @Override
  5. public void run() {
  6. System.out.println("home entry invoked");
  7. }
  8. });
  9. jobManager.delay(new Runnable() {
  10. @Override
  11. public void run() {
  12. System.out.println("delayed log");
  13. }
  14. }, "5s");
  15. String engine = "rythm";
  16. Controller.Util.render(engine);
  17. }

返回目录