import java.util.TimerTask;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hi.SpringContextHolder;
import org.nstcrm.customer.model.Company;
import org.nstcrm.customer.service.CompanyManager;
/**
* 定时执行任务
* @author ssh_kobe
*/
public class CompanyChangeTask extends TimerTask {
private static Log log = LogFactory.getLog(CompanyChangeTask.class);
private static boolean isRunning = false;
@Override
public void run() {
if (!isRunning) {
isRunning = true;
log.debug("开始执行任务..."); // 开始任务
CompanyManager companyMgr = (CompanyManager)SpringContextHolder.getBean(Company.class);
companyMgr.modifyCompanys();
log.debug("执行任务完成..."); // 任务完成
isRunning = false;
} else {
log.debug("上一次任务执行还未结束...");
}
}
}
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.commons.lang.time.DateUtils;
public class TaskManager implements ServletContextListener {
/**
* 每天的毫秒数
*/
public static final long PERIOD_DAY = DateUtils.MILLIS_PER_DAY;
/**
* 一周内的毫秒数
*/
public static final long PERIOD_WEEK = PERIOD_DAY * 7;
/**
* 无延迟
*/
public static final long NO_DELAY = 0;
/**
* 定时器
*/
private Timer timer;
/**
* 在Web应用结束时停止任务
*/
public void contextDestroyed(ServletContextEvent arg0) {
timer.cancel(); // 定时器销毁
}
/**
* 在Web应用启动时初始化任务
*/
public void contextInitialized(ServletContextEvent arg0) {
timer = new Timer("每天更新company数据", true);
// 每天执行一次
timer.schedule(new CompanyChangeTask(), NO_DELAY, PERIOD_DAY);
}
}
web.xml配置:
<!-- 定时器 定时执行的任务 -->
-<listener> <listener-class>org.util.TaskManager</listener-class> </listener>