javatimeruntimetimer-jobs

run a Java program in specific time


i need help to run my Java program on the server at a specific time like 2 pm (to index the new files).

Someone told me that Java has some thing called jobs but I don't know how to work with that. I tried this:

 boolean cond=true;
 while(cond){
     @SuppressWarnings("deprecation")
     int heur = new Date().getHours();
     @SuppressWarnings("deprecation")
     int minute= new Date().getMinutes();
     if(heur==16 && minute==02){
         indexer.close();
         end = new Date().getTime();
         File f;
         cond=false;
     }

But with this the program is still running.

How could I run my program at a specified time?


Solution

  • Theres a API called Quartz, It's where your program can schedule "Jobs" and it will run it at that time.

    Until I can give an example, try this link.

    Edit: First you have to create a class that implements org.quartz.Job. When you implement that you will have to implement the method execute(JobExecutionContext jobExecution), which is the method that will run when the "trigger" is fired.

    To set up the Schedule:

    SchedulerFactory schedulerFactory = new StdSchedulerFactory();
    // Retrieve a scheduler from schedule factory
    Scheduler scheduler = null;
    try {
        scheduler = schedulerFactory.getScheduler();
    }
    catch (SchedulerException e) {
        e.printStackTrace();
    }
    
    //Set up detail about the job 
    JobDetail jobDetail = new JobDetail("jobDetail", "jobDetailGroup", ImplementedJob.class);
    SimpleTrigger simpleTrigger = new SimpleTrigger("Trigger Name","defaultGroup", DATE);
    
    // schedule a job with JobDetail and Trigger
    scheduler.scheduleJob(jobDetail, simpleTrigger);
    // start the scheduler
    scheduler.start();