Java定时任务

Java应用程序中,如果想设置定时执行任务,有以下几种方式。

方式 特点
quartz  对简单的定时任务太重,支持注解和XML方式
Spring的@Scheduled 配置简单,支持注解和XML方式
ScheduledExecutorService 待考察。
Timer 待考察。

 

 

 

 

 

本文着重讲quartz和Spring的@Scheduled两种方式。这里通过例子讲解比较直观。如果应用中用到了Spring,建议直接看第二节。

任务:每小时执行一个任务。

1. 通过quartz实现 (不推荐,因为较复杂)

有两个部分,一个是job,另一个是trigger。

job定义实际执行任务:

package quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
 * Created by linxuan on 3/8/16.
 */
public class SimpleJob implements Job {

    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("SimpleJob1");
    }
}

trigger定义出发方式:

package quartz;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

/**
 * Created by linxuan on 3/8/16.
 */
public class CronTriggerExample {
    public static void main(String[] args) throws SchedulerException {
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = sf.getScheduler();

        JobDetail job = newJob(SimpleJob.class)
                .withIdentity("job1", "group1")
                .build();

        CronTrigger trigger = newTrigger()
                .withIdentity("trigger1", "group1")
                .withSchedule(cronSchedule("0 0 * * * ?"))
                .build();

        sched.scheduleJob(job, trigger);
        sched.start();
    }
}

其中cronSchedule("0 0 * * * ?")中用到了cron表达式。对cron表达式不熟悉的,请参考http://linux.vbird.org/linux_basic/0430cron.php。

CronTriggerExample类中出发了SimpleJob。

2. 通过Spring的@Scheduled方式

1) 编写任务类

package com.sankuai.edlp.msg;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * Created by linxuan on 4/26/16.
 */
@Component
public class SimpleJob {
    @Scheduled(cron = "0 0 * * * ?")
    public void doit(){
        System.out.println("SimpleJob1");
    }
}

2) 配置文件

在配置文件中添加一行

<!--开启这个配置,扫描到定时任务-->

<task:annotation-driven/>

done! spring中定时任务只需要添加@Scheduled注解和在配置文件中开启配置两步,非常简单。

(完) 

posted on 2016-04-26 11:13  lima  阅读(332)  评论(1编辑  收藏  举报

导航