run a Java program in specific time

好久不见. 提交于 2019-12-18 09:53:06

问题


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?


回答1:


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();



回答2:


There's no Thread.sleep() call in the loop, so it will "spin" at 100% CPU (not good), but it's a poor design anyway. A big improvement would be to simply calculate the number of milliseconds between "now" and when you want it to run, then call Thread.sleep(n).

However, a better solution is to use what the JDK already provides.

Have a look at this code which uses classes from the JDK concurrent library. This is a very simple example that would work:

import java.util.concurrent.*;

public static void main(String[] args)
{
    ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
    Runnable runnable = new Runnable() {
        public void run()
        {
            // do something;
        }
    };

    // Run it in 8 hours - you would have to calculate how long to wait from "now"
    service.schedule(runnable, 8, TimeUnit.HOURS); // You can 
}


来源:https://stackoverflow.com/questions/6201197/run-a-java-program-in-specific-time

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!