2012-01-06 78 views
0

我有一個主程序在Java中執行一些任務。由於我們的政策,我想將其作爲批量作業&運行,我不允許使用crontab進行配置。運行java程序作爲調度程序而不使用crontab

對我來說有什麼替代選擇?我如何安排我的Java程序每天運行一次?

任何示例包裝代碼將會很有幫助!

謝謝!

回答

2

我不確定你想用Java或Bash來安排你的工作。如果你試圖用Java實現,你可以嘗試創建您的工作Thread,並讓該線程睡眠一段:

class repeatTask extends Thread 
{ 
    int repeatTime; 

    public repeatTask(int repeatTime) 
    { 
     this.repeatTime = repeatTime; 
    } 

    public void run() 
    { 
     while(true) 
     { 
      try { 
       Thread.sleep(repeatTime); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      /* Some action codes here*/ 
     } 
    } 
} 

,你也可以使用Timer類,這也可以讓你創建一個螺紋:

public void start() 
{ 
    timerSchedule();    
} 

public void timerSchedule() 
{ 
    Timer timer = new Timer(); 

    timer.schedule(new TimerTask() { 
     public void run() { 
      /*Action codes here*/ 
     } 
    }, /*Repeat Time here*/); 
} 
3

可以使用at - 在稍後的時間執行命令
和/或sleep結合起來 - 延遲的時間
環路上指定的金額,在後臺

例如跑步,說你有後續的腳本

#!/usr/bin/env bash 
while true; do 
    java -jar your.jar.file 
    sleep 24h # wait one day 
done 

來看,它作爲

bash script && disown & 
0

你也可以看看Quartz Scheduler。它的調度格式與crontab非常相似。

2

...由於我們的政策,我不能使用crontab,我可以配置它。

很明顯,這項政策必須有某些原因,儘管它並不明顯。任何替代方案可能可能陷入相同的推理導致他們禁止cron犯規。 (當然,有些上面提出的替代方案有可能比cron糟糕

做的最好的事情是要求誰設置此策略告訴你批准的方式來安排工作的人。或者至少要求他們解釋爲什麼禁止使用cron,以便您瞭解在您提出的任何替代方案中要避免什麼。

(好吧,這是可能的,該政策是一個愚蠢的下意識的反應在過去的一些問題,但是,你仍然需要了解的問題是什麼......)

1

我是像這樣的事情的cron4j的大粉絲:看看這是否適合你。您可以將它用於調度位,並運行一個標準的Java程序。