java web使用监听器实现定时周期性执行任务的功能

    java web使用监听器实现定时周期性执行任务的功能在做web项目的时候,有时需要做个定时的功能去执行某个

任务,或者定时周期性去执行某个任务,如定时邮件发送、文件删除等。那么,我们就需要借助监听器去实现这一个

功能,具体的实现过程如下:


    1.配置web.xml,添加监听器指定类


	<!-- 定时监听器配置 -->
	<listener>
		<listener-class>listener.DuetimeListener</listener-class>
	</listener>

   

      2.监听类实现ServletContextListener接口,实现监听功能


public class DuetimeListener implements ServletContextListener{
	private Timer timer = null; 
	
	@Override
	public void contextDestroyed(ServletContextEvent event) {
		timer.cancel();
	}

	@Override
	public void contextInitialized(ServletContextEvent event) {
		
		// 添加tomcat日志
		event.getServletContext().log("定时器已启动");
		System.out.println("定时器启动");
		
		try {
			Calendar calendar = Calendar.getInstance();
			calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制时,24小时制
			calendar.set(Calendar.MINUTE, 0);  // 控制分
			calendar.set(Calendar.SECOND, 0);  // 控制秒
						
			Date time = calendar.getTime(); // 执行任务的时间,可自行修改,此时为12:00:00

			timer = new Timer(true);
			//参数1:需要执行的类,参数2:执行时间,参数3:执行周期(参数可自行修改)
			//类需要继承util的TimeTask,默认执行类下的run()方法;
			timer.scheduleAtFixedRate(new TestTimeTask(), time, 1000 * 60 * 60 * 24);  //隔一天(周期性)扫描执行方法,
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

   

      3.功能类继承TimerTask类,默认执行run方法


public class TestTimeTask extends TimerTask {

	@Override
	public void run() {
		System.out.println("定时扫描监听器程序开始执行,发送邮件");
		deleteFile();
		sendEmail();
		//to do
	}
	
	public boolean deleteFile(){
		System.out.println("定时执行删除文件的方法");
		return true;
		//to do
	}
	
	public boolean sendEmail(){
		System.out.println("定时执行发送邮件的方法");
		return true;
		//to do
	}

}

   

    4.该demo,只用到web.xml、DuetimeListener.java、TestTimeTask.java三个文件,只是实现定时监听、周期

性执行任务的功能,而邮件发送、文件删除等自定义功能需要自行添加上去,只需在run方法下修改邮件发送、文件

删除等功能即可;


    5.demo链接:http://download.csdn.net/detail/alan_liuyue/9834172




  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Java EE中的定时任务框架Quartz来实现每天定时执行任务。具体实现方法如下: 1. 在pom.xml文件中添加Quartz依赖: ``` <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> </dependency> ``` 2. 在web.xml文件中配置Quartz的监听器: ``` <listener> <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class> </listener> ``` 3. 创建一个Quartz定时任务类,实现Job接口: ``` public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 执行具体的任务逻辑 System.out.println("执行定时任务..."); } } ``` 4. 在项目启动时,使用Quartz的Scheduler类来创建定时任务: ``` // 创建调度器 SchedulerFactory sf = new StdSchedulerFactory(); Scheduler scheduler = sf.getScheduler(); // 创建任务 JobDetail jobDetail = JobBuilder.newJob(MyJob.class) .withIdentity("myJob", "group1") .build(); // 创建触发器 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("myTrigger", "group1") .withSchedule(CronScheduleBuilder.dailyAtHourAndMinute(0, 0)) // 每天0点执行 .build(); // 将任务和触发器放入调度器中 scheduler.scheduleJob(jobDetail, trigger); // 启动调度器 scheduler.start(); ``` 上述代码中,使用Cron表达式来设置每天的执行时间。具体的Cron表达式语法可以参考Quartz官方文档。 这样,就可以实现每天定时执行任务了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值