Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在特定时间执行java代码_Java_Spring_Spring Mvc_Time_Scheduling - Fatal编程技术网

在特定时间执行java代码

在特定时间执行java代码,java,spring,spring-mvc,time,scheduling,Java,Spring,Spring Mvc,Time,Scheduling,我正在开发一个足球经理代码,用于处理朋友之间的游戏,在游戏中,人们需要组建自己的球队,当真正的比赛开始时,谁的球员打得更好,谁就会赢得比赛 显然,一旦比赛开始,球员们就不能再改变球队了。在数据库中,每场比赛都有一个属性“match is opened”,用于确定球员是否仍然可以更改球队。一旦值设置为false,球员就不能再编辑他们的球队了 所以基本上我有一个datetime,当这个日期出现时,数据库上的值必须设置为false 我想了很多选择,我将向你解释: 显然,最肮脏和最幼稚的做法是登录到服

我正在开发一个足球经理代码,用于处理朋友之间的游戏,在游戏中,人们需要组建自己的球队,当真正的比赛开始时,谁的球员打得更好,谁就会赢得比赛

显然,一旦比赛开始,球员们就不能再改变球队了。在数据库中,每场比赛都有一个属性“match is opened”,用于确定球员是否仍然可以更改球队。一旦值设置为false,球员就不能再编辑他们的球队了

所以基本上我有一个datetime,当这个日期出现时,数据库上的值必须设置为false

我想了很多选择,我将向你解释:

  • 显然,最肮脏和最幼稚的做法是登录到服务器,打开dbms并查询db以将值设置为false。非常脏的溶液
  • 制作一个批处理脚本并将其放入计划任务中。这个解决方案也是非常肮脏的,因为每周我都要登录服务器,用新的日期编辑脚本
  • 在webapp上进行一些控制,比如:“当一个用户试图编辑他的团队时,如果时间已过,则为每个人将“打开”属性设置为false。”这种解决方案似乎是肮脏的,因为在有人尝试更改队形并且系统意识到问题之前,队形实际上是开放的
  • 给定一个日期,当x小时到达时,代码自动启动一个关闭团队的方法
最后一个是我更喜欢开发的解决方案,我知道有一些lib允许进行调度,但我真的不知道这样的东西是否可行,以及如何开发这些东西


如有任何提示,我们将不胜感激。

也许您会感兴趣。它有一个作业接口,可以像Cron任务一样进行调度。

我建议您是使用spring调度器(如果您使用spring)还是使用简单的java executor服务来运行方法,比如说在上一次执行后延迟5分钟。看看这里

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

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

下面是我们使用的一个示例:

@Configuration
@EnableScheduling
public class SchedulerConfiguration {

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

}

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


我仍然不明白您何时要将字段设置为
false
。我相信它被称为football而不是soccer,您看过spring scheduler了吗?请提供您尝试过的代码。而不是标志栏,为什么不在
match\u start
时间戳列中设置一个
match\u start
,然后在
match\u start
之后不允许进行任何更改?@RohitJain我想在真正的匹配开始前半小时将属性设置为false。这实际上是spring的方法:D
@Scheduled(cron="*/5 * * * * MON-FRI")
public void doSomething() {
    //something that should execute on weekdays only
}