2012-01-06 82 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程序。