java 定时任务

java 定时任务的话 可以用 JDK 自带的TimerTask  来实现(具体查阅api 文档), 而这个定时任务 为了跟随 web 项目 启动而启动的话 有两种 实现方式。

1:web.xml里配置一个Servlet

设置其随web server的启动而启动。然后在该Servlet的init()方法里启动定时器,在destory()方法里销毁定时器。

2:web.xml里配置一个Listener

在该Listener的初始化方法里启动定时器,在其销毁的方法销毁定时器。


下面是 demo:

继承TimerTask 

public class CrmDataTimerTasker  extends TimerTask {
	private static Logger log=Logger.getLogger(CrmDataTimerTasker.class);
	@Override
	public void run() {
		 
			//需要执行的任务
			System.out.println("这里是你要调用的任务");
		 
		}
	 

}

public class TimerManager {
	
	private static final long PERIOD_DAY = 24*60*60*1000;
	private static Timer timer = new Timer(false);
	public TimerManager(){
		System.out.println("-------------------------------------------定时任务初始化");
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.HOUR_OF_DAY, 15);
		calendar.set(Calendar.MINUTE, 0);
		calendar.set(Calendar.SECOND, 0);
		Date date=calendar.getTime();
		
		 //如果第一次执行定时任务的时间 小于 当前的时间
		 //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
		if(date.before(new Date())){
			date=this.addDay(date, 1);
		}
		CrmDataTimerTasker task = new CrmDataTimerTasker();//这个是你的任务
		
		timer.schedule(task, date,PERIOD_DAY);
		
		
	}
	
	public static void cancel(){
		timer.cancel();
	}
	
	public Date addDay(Date date,int num){
		
		Calendar calendar=Calendar.getInstance();
		calendar.setTime(date);
		calendar.add(Calendar.DAY_OF_MONTH, num);
		return calendar.getTime();
		
	}
	
	
	
}


我选择在 web.xml 里面 配置一个监听器


	<listener>
		<display-name>StartListener</display-name>
		<listener-class>com.aisino.crm.remote.service.crm.until.crmTaskerListener</listener-class>
	</listener>



crmTaskerListener.java


public class crmTaskerListener implements ServletContextListener {
	private static Logger log=Logger.getLogger(crmTaskerListener.class);
	

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		log.info("++++++++++++++++++++我开始监听了++++++++++++++++++++++++");
		log.info("++++++++++++++++++++我开始监听了++++++++++++++++++++++++");
		new TimerManager();
	}
	
	
	
	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		log.info("==================销毁了=====================");
		TimerManager.cancel();
	}
}


一些相关资料可以参阅:

web.xml 详细介绍 http://mianhuaman.iteye.com/blog/1105522

定时任务相关: 

http://www.cnblogs.com/leijh/archive/2013/05/02/3054695.html

http://callan.iteye.com/blog/123374

http://www.open-open.com/lib/view/open1338175095183.html

你可能感兴趣的:(java 定时任务)