java 通过listener开启定时任务

本文介绍了一种使用Java Timer实现定时任务的方法,通过读取配置文件设置任务执行周期和首次执行时间,确保任务按预设时间启动,适用于需要定期执行特定操作的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当前使用的是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>


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值