java 通过listener开启定时任务

当前使用的是Timer进行定时任务,Timer同时指定多久后开始执行以及执行周期。

//开启监听
public class TimerManagerListener implements ServletContextListener {

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		new TimerManager();
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		// TODO Auto-generated method stub
		
	}

}
//简易定时任务管理
public class TimerManager {
	Properties properties = new Properties();

	public TimerManager() {
		try {
            //读取配置文件
			properties.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream("timer.properties"),"UTF-8"));
			long PERIOD_DAY = Integer.parseInt(properties.getProperty("periodDay")) * 60 * 60 * 1000;
			// 获取并处理配置文件中的时间
			String backuptime = properties.getProperty("backuptime");
			String[] time = backuptime.split(":");
			int hours = Integer.parseInt(time[0]);
			int minute = Integer.parseInt(time[1]);
			int second = Integer.parseInt(time[2]);

			Calendar calendar = Calendar.getInstance();

			/*** 定制每日24:00执行方法 ***/
			calendar.set(Calendar.HOUR_OF_DAY, hours);
			calendar.set(Calendar.MINUTE, minute);
			calendar.set(Calendar.SECOND, second);

			Date date = calendar.getTime(); // 第一次执行定时任务的时间
			// 如果第一次执行定时任务的时间 小于 当前的时间
			// 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
			if (date.before(new Date())) {
				date = this.addDay(date, 1);
			}
			Timer timer = new Timer();
			BackUpTimerTask task = new BackUpTimerTask();
			// 安排指定的任务在指定的时间开始进行重复的固定延迟执行。
			timer.schedule(task, date, PERIOD_DAY);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	// 增加或减少天数
	public Date addDay(Date date, int num) {
		Calendar startDT = Calendar.getInstance();
		startDT.setTime(date);
		startDT.add(Calendar.DAY_OF_MONTH, num);
		return startDT.getTime();
	}
}
//定时任务
public class BackUpTimerTask extends TimerTask {

	@Override
	public void run() {
		try {
			new BackupDb();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
//内容
public class BackupDb {
	System.out.println("hello world");
}

   

配置文件

timer.properties 配置文件

periodDay=24
backuptime=24:00:00

web.xml文件中添加listener

<listener>
	<listener-class>com.listener.TimerManagerListener</listener-class>
</listener>


 

发布了47 篇原创文章 · 获赞 10 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/fearlessnesszhang/article/details/89176075