繁体   English   中英

在特定时间执行Java代码

[英]Execute java code at specific time

我正在开发一个足球经理代码,该代码处理人们之间需要人们组建球队的朋友之间的比赛,并且在真正的比赛开始时谁的球员表现更好就赢得了比赛。

显然,一旦游戏开始,玩家就无法再更换团队。 在数据库中,每场比赛都有一个“比赛已打开”属性,该属性确定玩家是否仍然可以更改其球队。 一旦设置了值,则错误的玩家将无法再编辑其团队。

所以基本上我有一个日期时间,当该日期发生时,数据库上的值必须设置为false。

我想我会向您解释许多替代方法:

  • 显然,最肮脏和天真的方法是登录到服务器,打开dbms并查询db以将值设置为false。 非常脏的解决方案。
  • 制作批处理脚本并将其放入计划的任务中。 这个解决方案也很脏,因为我每周都要登录服务器以使用新日期来编辑脚本。
  • 在Web应用程序上进行一些控制,例如:“当其中一个用户试图编辑他的团队时,如果时间已经过去,则将每个人的“打开”属性设置为false。 该解决方案似乎是肮脏的,因为在有人尝试更改构型并且系统识别出问题之前,构架实际上是开放的。
  • 给定一个日期,当x小时到达时,代码会自动启动关闭团队的方法。

最后一个是我更愿意开发的解决方案,我知道有一些库可以用于调度,但是我真的不知道这样的事情是否可行以及您将如何开发这些东西。

任何提示将不胜感激。

也许Quartz Framework对您来说可能很有趣。 它具有一个Job界面,可以像Cron任务一样进行调度。

这是我们使用的示例:

@Configuration
@EnableScheduling
public class SchedulerConfiguration {

   @Scheduled(cron = "15 * * * * ") //every 15 minutes
   public void scheduledTask() {
      doSomethingInYourDatabase();
   }

}

我会建议是使用spring调度程序(如果您使用spring)还是简单的Java executor服务来运行一个方法,比如说在上一次执行后延迟了5分钟。 在这里看看http://tutorials.jenkov.com/java-util-concurrent/executorservice.html

实际上,您只需要运行一个简单的更新查询,例如

update match set match_open = false where start_time = (Sysdate-X);

可能是您正在使用Spring。 您可以添加Service类(@Service)并使用@Scheduled注释方法,该方法将帮助您按定义的时间间隔执行任务。 检查详情弹簧排程

@Scheduled(cron="*/5 * * * * MON-FRI")
public void doSomething() {
    //something that should execute on weekdays only
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM