问题
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