我创建了一个任务,使用找到的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.");
};
}
}