org.springside.examples.showcase.demos.schedule.SpringCronJob.java Source code

Java tutorial

Introduction

Here is the source code for org.springside.examples.showcase.demos.schedule.SpringCronJob.java

Source

/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package org.springside.examples.showcase.demos.schedule;

import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import org.apache.commons.lang3.Validate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springside.modules.utils.Threads;

/**
 * SpringThreadPoolTaskSchedulerCron?.
 * SpringTask NameSpace??, ????.
 * 
 * @author calvin
 */
public class SpringCronJob implements Runnable {

    private String cronExpression;

    private int shutdownTimeout = Integer.MAX_VALUE;

    private ThreadPoolTaskScheduler threadPoolTaskScheduler;

    @Autowired
    private UserCountScanner userCountScanner;

    @PostConstruct
    public void start() {
        Validate.notBlank(cronExpression);

        threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
        threadPoolTaskScheduler.setThreadNamePrefix("SpringCronJob");
        threadPoolTaskScheduler.initialize();

        threadPoolTaskScheduler.schedule(this, new CronTrigger(cronExpression));
    }

    @PreDestroy
    public void stop() {
        ScheduledExecutorService scheduledExecutorService = threadPoolTaskScheduler.getScheduledExecutor();
        Threads.normalShutdown(scheduledExecutorService, shutdownTimeout, TimeUnit.SECONDS);
    }

    /**
     * ??.
     */
    @Override
    public void run() {
        userCountScanner.executeBySpringCronByJava();
    }

    public void setCronExpression(String cronExpression) {
        this.cronExpression = cronExpression;
    }

    /**
     * normalShutdown,??.
     */
    public void setShutdownTimeout(int shutdownTimeout) {
        this.shutdownTimeout = shutdownTimeout;
    }
}