gpt4 book ai didi

java - Play 2.5 - 在一天中的特定时间运行 Java 方法 (cron)

转载 作者:行者123 更新时间:2023-12-02 03:03:19 25 4
gpt4 key购买 nike

我正在开发一个 Play 2.5 应用程序,该应用程序需要每天中午、下午 2 点、4 点自主运行一个方法。

到目前为止我已经关注了another answer on here这让我度过了大部分时间。 application.conf 文件已更新以查看模块文件,该文件正确绑定(bind)到 OnStartup() 方法。

我认为问题与 OnStartup() 方法中的代码有关,我已包含以下代码 - 这是在一天中的特定时间运行某些内容的正确方法吗?

package controllers;

import com.google.inject.Inject;
import com.google.inject.Singleton;

import java.util.Calendar;


@Singleton
public class OnStartup {

@Inject
public OnStartup() {

Calendar cal = Calendar.getInstance();

String hour = String.valueOf(cal.get(Calendar.HOUR_OF_DAY));
String minute = String.valueOf(cal.get(Calendar.MINUTE));

String dateTime = hour + ":" + minute;
String time = "12:00";
String time1 = "14:00";
String time2 = "16:00";

if (dateTime.equals(time) || dateTime.equals(time1) || dateTime.equals(time2)){
System.out.print(dateTime);
myAmazingClass.doSomethingWonderful();
}
}
}

最佳答案

根据您的方法,您需要三样东西:模块、 Actor 和调度程序。

第 1 步:创建 Actor

import akka.actor.UntypedActor;
import play.Logger;

public class DoSomethingActor extends UntypedActor{

@Override
public void onReceive(final Object message) throws Throwable {
Logger.info("Write your crone task or simply call your method here that perform your task"+message);

}

}

第2步:创建调度程序

import java.util.concurrent.TimeUnit;

import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;

import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Cancellable;
import scala.concurrent.duration.Duration;

@Singleton
public class DoSomethingScheduler {

@Inject
public DoSomethingScheduler(final ActorSystem system,
@Named("do-something-actor") final ActorRef doSomethingActor) {
final Cancellable scheduler;
final int timeDelayFromAppStart = 0;
final int timeGapInSeconds = 1; //Here you provide the time delay for every run
system.scheduler().schedule(
Duration.create(timeDelayFromAppStart, TimeUnit.MILLISECONDS), //Initial delay when system start
Duration.create(timeGapInSeconds, TimeUnit.SECONDS), //Frequency delay for next run
doSomethingActor,
"message for onreceive method of doSomethingActor",
system.dispatcher(),
null);
}
}

第三步:将调度程序和参与者与模块绑定(bind)。

import com.google.inject.AbstractModule;

import play.libs.akka.AkkaGuiceSupport;

public class SchedulerModule extends AbstractModule implements AkkaGuiceSupport{

@Override
protected void configure() {
this.bindActor(DoSomethingActor.class, "do-something-actor");
this.bind(DoSomethingScheduler.class).asEagerSingleton();
}

}

第四步:在 aaplication.conf 中配置模块

play.modules.enabled += "com.rits.modules.SchedulerModule"

确保无需担心 onStart 模块,像往常一样,该模块仅用于您调度任务的目的。

关于java - Play 2.5 - 在一天中的特定时间运行 Java 方法 (cron),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42139866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com