2014-03-04 63 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