在特定时间执行java代码

时间:2015-03-23 09:06:02

标签: java spring spring-mvc time scheduling

我正在开发一个足球经理代码来处理朋友之间的游戏,人们需要在这些游戏中编译他们的团队,以及当真正的比赛开始时谁拥有能够更好地玩游戏的玩家。

显然,一旦游戏开始,玩家就不能再改变他们的团队了。在数据库中,每个匹配都有一个属性"匹配打开"这决定了球员是否仍然可以改变自己的球队。一旦设置了值,玩家就不能再编辑他们的团队了。

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

我想了很多替代方案我会解释你:

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

最后一个是我喜欢开发的解决方案,我知道有一些库可以使用调度,但我真的不知道这样的东西是否可能,你会如何开发这个东西。

任何提示都将受到赞赏。

4 个答案:

答案 0 :(得分:1)

也许Quartz Framework可能会让你感兴趣。它有一个Job接口,可以像Cron任务一样进行调度。

答案 1 :(得分:1)

以下是我们使用的示例:

@Configuration
@EnableScheduling
public class SchedulerConfiguration {

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

}

答案 2 :(得分:0)

我建议是使用spring scheduler(如果你使用的是spring)还是简单的java executor服务来运行一个方法,让我们说在上一次执行后延迟5分钟。看看http://tutorials.jenkov.com/java-util-concurrent/executorservice.html

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

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

答案 3 :(得分:0)

可能是你正在使用春天。您可以添加Service类(@Service)并使用@Scheduled带注释的方法,该方法将帮助您按定义的时间间隔执行任务。查看详细信息spring schedulling

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