调度程序 - TaskInvocation - 此处没有可用的HTTP上下文。玩框架

时间:2018-04-12 13:11:06

标签: java playframework

我创建了一个任务,使用找到的here指南,从Play框架应用程序每小时运行一次。

这非常有效,它自动执行的任务是在特定日期将通知存储在数据库中。

现在我正在尝试发送电子邮件以附带通知。这也适用于硬编码文本。但是,我需要使用Messages进行翻译。

为此,我创建了一个电子邮件模板,在其中将消息密钥传递给电子邮件模板。这将作为应用程序的一部分正常工作。

这会导致调度程序输出以下错误:

[error] a.d.TaskInvocation - There is no HTTP Context available from here.
java.lang.RuntimeException: There is no HTTP Context available from here.
    at play.mvc.Http$Context.current(Http.java:68)
    at play.core.j.PlayMagicForJava$.ctx(TemplateMagicForJava.scala:21)
    at play.core.j.PlayMagicForJava$.implicitJavaMessages(TemplateMagicForJava.scala:36)
    at views.html.emailtemplates.reminder$.apply(reminder.template.scala:48)
    at views.html.emailtemplates.reminder$.render(reminder.template.scala:65)
    at views.html.emailtemplates.reminder.render(reminder.template.scala)
    at api.Scheduler.Scheduler.lambda$runHourlyScheduleChecks$0(Scheduler.java:44)
    at akka.actor.LightArrayRevolverScheduler$$anon$2$$anon$1.run(LightArrayRevolverScheduler.scala:101)

我认为这是由电子邮件scala模板中的消息调用引起的:

@Messages(titleMessageKey)

如何从计划任务中访问消息?

我的日程安排课程:

  

请注意每小时任务正在运行以进行开发   目的。

public class Scheduler {

    private final ActorSystem actorSystem;
    private final ExecutionContext executionContext;

    @Inject
    public Scheduler(ActorSystem actorSystem, ExecutionContext executionContext) {
        this.actorSystem = actorSystem;
        this.executionContext = executionContext;
        this.initialize();
    }

    private void initialize() {

        this.actorSystem.scheduler().schedule(
                Duration.create(30, TimeUnit.SECONDS), // delay
                Duration.create(1, TimeUnit.MINUTES), // interval
                runHourlyScheduleChecks(),
                this.executionContext
        );
    }

    private Runnable runHourlyScheduleChecks(){

        return () -> {
            Logger.info("api.Scheduler.Scheduler.runHourlyScheduleChecks() - Starting automated hourly schedule checker.");

            Notifications.sendDueNotifications();

            Logger.info("api.Scheduler.Scheduler.runHourlyScheduleChecks() - Schedule checker complete.");
        };
    }
}

0 个答案:

没有答案