2014-03-04 5 views
25

Я пишу автономное пакетное приложение Java для чтения данных с YouTube. Я хочу настроить работу cron для выполнения определенной работы каждый час.Как создать Java cron job

Я искал и нашел способы выполнить задание 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, вам нужно написать shellscript, чтобы сначала запустить java-пакет.

После этого в unix вы запускаете эту команду «crontab -e» для редактирования скрипта crontab. Для настройки crontab, пожалуйста, обратитесь к этой статье http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/

Сохраните настройку crontab. Затем подождите, когда придет время, программа запустится автоматически.

+0

Я уже пробовал это. Но это не обеспечивает решение для запуска программы Java в Cron. – user3138111

+0

@ user3138111: Почему бы и нет? Какую строку вы добавили? Как насчет: '0 * * * * java -cp yourpath SomeClass' или' @hourly java -cp yourpath SomeClass' –

+0

Я создал класс Java helloworld для записи файла в файл. Но я не вижу, как генерируется выходной файл. Это мой cron Job text 1 * * * * java -cp HelloWorld. Класс HelloWorld содержит текст ниже \t \t PrintWriter out = new PrintWriter (новый FileWriter ("/ output.txt", true)); \t \t вне.Println ("ОЗУ"); \t \t out.close(); – user3138111

6

Прежде всего, я рекомендую вам всегда ссылаться docs, прежде чем вы начнете новую вещь.

У нас есть SchedulerFactory, который назначает задание, основанное на выражении Cron.

//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

Ваши 'документы 'относятся к сторонней библиотеке ... И OP спрашивает о настройке задания cron для запуска java-программы. Вы, похоже, настраиваете работу из своего кода. –

+3

Downvoting для использования сторонней библиотеки без упоминания. – sangupta

+0

Продвижение, потому что это то, что мне нужно. –

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"); 
    } 

} 

Alternative Вы можете также использовать ScheduledExecutorService.