2014-03-04 62 views
25

我正在編寫一個獨立的批處理Java應用程序來從YouTube讀取數據。我想設置一個cron工作來每小時完成一定的工作。如何創建Java cron作業

我搜索並找到了爲基本操作執行cron作業的方法,但不能用於Java應用程序。

+1

你是否在問如何使用Unix cron?如果您只是想讓您的Java應用程序定期工作,請參閱['ScheduledExecutorService'](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html) 。這個內置的Java類將按照您指定的頻率運行給定的['Runnable'](http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html)。這種方法包含在Java中,不需要像cron這樣的外部工具。 –

+0

找到此.. https://stackoverflow.com/questions/44270994/how-make-a-job-to-determinate-date-only-once-from-java – marlonpya

回答

3

如果你使用的是unix,你需要編寫一個shell腳本來首先運行你的java批處理。

之後,在unix中,運行此命令「crontab -e」編輯crontab腳本。 爲了配置crontab,請參考這篇文章http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/

保存你的crontab設置。然後等待時間到來,程序將自動運行。

+0

我已經嘗試過這一點。但是這並不能提供在Cron中運行Java程序的解決方案。 – user3138111

+0

@ user3138111:爲什麼不呢?你補充什麼?如何:'0 * * * * java -cp yourpath SomeClass'或'@hourly java -cp yourpath SomeClass' –

+0

我創建了一個helloworld Java類來將它寫入文件。但是我無法看到生成的輸出文件。這是我的cron作業文本1 * * * * java -cp HelloWorld。 HelloWorld類包含以下文本\t \t PrintWriter out = new PrintWriter(new FileWriter(「/ output.txt」,true)); \t \t out。的println( 「RAM」); \t \t out.close(); – user3138111

6

首先,我會建議你在開始新事物之前總是參考docs

我們有SchedulerFactory,它根據給定的Cron表達式對Job進行調度。

//Create instance of factory 
    SchedulerFactory schedulerFactory=new StdSchedulerFactory(); 

    //Get schedular 
    Scheduler scheduler= schedulerFactory.getScheduler(); 

    //Create JobDetail object specifying which Job you want to execute 
    JobDetail jobDetail=new JobDetail("myJobClass","myJob1",MyJob.class); 

    //Associate Trigger to the Job 
    CronTrigger trigger=new CronTrigger("cronTrigger","myJob1","0 0/1 * * * ?"); 

    //Pass JobDetail and trigger dependencies to schedular 
    scheduler.scheduleJob(jobDetail,trigger); 

    //Start schedular 
    scheduler.start(); 

MyJob.class

public class MyJob implements Job{ 

     @Override 
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { 
       System.out.println("My Logic"); 
     } 

    } 
+3

你的'docs'是指第三方庫...並且OP在詢問有關啓動java程序的cron作業的設置。你似乎在你的代碼中設置了一份工作。 –

+3

Downvoting使用第三方庫而不提。 – sangupta

+0

Upvoting,因爲這是我所需要的。 –

23

可以使用的TimerTask的Cronjobs。

Main.java

public class Main{ 
    public static void main(String[] args){ 

    Timer t = new Timer(); 
    MyTask mTask = new MyTask(); 
    // This task is scheduled to run every 10 seconds 

    t.scheduleAtFixedRate(mTask, 0, 10000); 
    } 

} 

MyTask.java

class MyTask extends TimerTask{ 

    public MyTask(){ 
    //Some stuffs 
    } 

    @Override 
    public void run() { 
    System.out.println("Hi see you after 10 seconds"); 
    } 

} 

替代 您還可以使用ScheduledExecutorService