簡體   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