Java TimerTask - 每天在XX:MM小时运行任务

时间:2016-05-30 09:16:22

标签: java

使用Timer和TimerTask。

无法理解为什么此配置会在部署时立即启动任务(在基于Web的Spring应用程序中使用此配置)。它应该从 today.getTime 开始,然后必须每天重复。

    Calendar today = Calendar.getInstance();
    today.set(Calendar.HOUR_OF_DAY, 3);
    today.set(Calendar.MINUTE, 0);
    today.set(Calendar.SECOND, 0);

    MyTask task = new MyTask();
    Timer timerJob = new Timer();
    timerJob.schedule(task, today.getTime(), 
             TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS)); 

1 个答案:

答案 0 :(得分:1)

我认为,最好在24小时重复间隔时使用CronTrigger或Trigger。

CronTrigger示例:

public class CronTriggerRunner {

public static void main(String args[]) throws SchedulerException, Exception {

    SchedulerFactory schedulerFactory = new StdSchedulerFactory();

    Scheduler scheduler = schedulerFactory.getScheduler();

    JobDetail job = JobBuilder.newJob(ClassToRun.class).withIdentity("jobName", "group").build();
    // Starting CronTrigger
    String exp = "0 0 9 * * ?"; //trigger format, everyday at 9:00 am

    Trigger trigger = TriggerBuilder.newTrigger()
                                .startNow()
                                .withSchedule(
                                     CronScheduleBuilder.cronSchedule(exp))
                                .build();

    // Planning job detail
    scheduler.scheduleJob(job, trigger);

    // starting scheduler
    scheduler.start();
}
}

ClassToRun.java

public class ClassToRun implements Job {

@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
    try{
        //doSomething
    }
    catch(Exception e){
        e.printStackTrace(System.out);
    }
  }
}

每天早上9点,public void execute()函数会做一些事情:D

希望这会有所帮助。请告诉我。

编辑:您需要下载并添加2个jar文件。 1)quartz-2.2.1.jar 2)slf4j-api-1.6.6.jar