java实现定时任务几种方式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhenghuasheng/article/details/51721015

1,java.util.TimerTask实现定时任务

/**
 * Created by zhenghuasheng on 2016/5/9.
 */
public class Main {
    public static void main(String[] args) {

        Timer time  = new Timer();

        time.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                System.out.println("timer run");
            }
        },new Date(),2000);

    }

}

2, java.util.concurrent.ScheduledExecutorService定时任务

  ScheduledExecutorService executor = Executors.newScheduledThreadPool(4);
        executor.scheduleWithFixedDelay(new Runnable() {
            public void run() {

                logger.debug("||定时扫描,创建定时任务...");

            }
        }, 0, 10, TimeUnit.SECONDS);

3,Spring Scheduler 定时任务

/**
     * 统计与业务系统之间数据往来日志,每日上午6点执行 0 0 6 * * ?/
     */
    @Scheduled(cron = "0 0 6 * * ?")
    public void getDayTaskCountLog() throws ParseException {

    }
spring配置文件中需开启@Scheduled注解
<!--开启这个配置,spring才能识别@Scheduled注解-->
    <task:annotation-driven scheduler="qbScheduler" mode="proxy"/>
    <task:scheduler id="qbScheduler" pool-size="10"/>

4,Quartz2 定时任务

@Service
public class QuartzCommonManager {
    Logger logger = LoggerFactory.getLogger(QuartzCommonManager.class);
    private static Scheduler scheduler;

    @PostConstruct
    private void init (){
        try {
            scheduler = new StdSchedulerFactory().getScheduler();
            logger.info("[QuartzCommonManager]init quartz scheduler successful");
        } catch (SchedulerException e) {
            logger.error("[QuartzCommonManager]init quartz scheduler error!errorMessage:{}", ExceptionUtil.getMessage(e));
        }
    }

    @PreDestroy
    private void destroy (){
        try {
            if (scheduler.isStarted()){
                scheduler.shutdown(true);
                logger.info("[QuartzCommonManager]shutdown quartz scheduler successful");
            }
        } catch (SchedulerException e) {
            logger.error("[QuartzCommonManager]shutdown quartz scheduler error!errorMessage:{}", ExceptionUtil.getMessage(e));
        }

    }

    public  void createSimpleJob(String jobName, String triggerName, String jobGroupName, String triggerGroupName, Class clazz,Integer seconds){
        try {
            // define the job and tie it to our HelloJob class
            JobDetail job = newJob(clazz)
                    .withIdentity(jobName, jobGroupName)
                    .build();

            // Trigger the job to run now, and then repeat every 40 seconds
            Trigger trigger = newTrigger()
                    .withIdentity(triggerName, triggerGroupName)
                    .startNow()
                    .withSchedule(simpleSchedule()
                            .withIntervalInSeconds(seconds)
                            .repeatForever())
                    .build();
            // Tell quartz to schedule the job using our trigger
            scheduler.scheduleJob(job, trigger);
            if (!scheduler.isStarted()) {
                scheduler.start();
            }
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}

定点任务

public void addJob(String jobName, String triggerName, String jobGroupName, String                triggerGroupName, Class clazz, Date triggerTime, String jobId, String taskId) {

        try {

            /**查询job是否存在,存在将删除**/
            JobKey key = new JobKey(jobName, jobGroupName);
            if (scheduler.checkExists(key)){
                scheduler.deleteJob(key);
            }

            long time = new Date().getTime();
            if (triggerTime.getTime() < time) {
                triggerTime = new Date((new Date().getTime() + SvspCommonConstant.job_create_offsetTime));
            }

            JobDetail jobDetail= newJob(clazz).withIdentity(jobName,jobGroupName).build();
            Trigger trigger= newTrigger()
                    .withIdentity(triggerName,triggerGroupName).startAt(triggerTime).build();
            jobDetail.getJobDataMap().put("taskId", taskId);
            jobDetail.getJobDataMap().put("jobId", jobId);
            scheduler.scheduleJob(jobDetail,trigger);
            // 启动
            if (!scheduler.isStarted()) {
                scheduler.start();
                logger.info("[QuartzCommonManager]quartz scheduler started successful");
            }

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

Quartz的定时任务需实现job接口,execute中为执行逻辑

public class ImmediateJob implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {

    }
}

http://www.quartz-scheduler.org/documentation/quartz-2.2.x/examples/Example4.html
5,Spring+Quartz2定时任务(略,参考spring官方文档)

猜你喜欢

转载自blog.csdn.net/zhenghuasheng/article/details/51721015