java定时器 每天凌晨 固定执行一个方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java定时器 每天凌晨 固定执行一个方法相关的知识,希望对你有一定的参考价值。
定时器怎么写,写在哪?需要运行的方法写在哪儿?
二、如果是需要Tomcat启动就能执行,不需要main方法的定时器的话:web.xml里面需要这么配置:
<listener>
<listener-class>
com.InitListener
</listener-class>
</listener>
第一个类:InitListener
package com.listener;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 系统启动时的监听类 初始化系统数据
*
* @author jhoneder
*
*/
public class InitListener implements ServletContextListener
public void contextDestroyed(ServletContextEvent arg0)
// TODO Auto-generated method stub
// context销毁时,销毁初始化数据
public void contextInitialized(ServletContextEvent event)
// TODO Auto-generated method stub
try
goTimmer();
catch (Exception e)
System.out.println("失败:" + e.getMessage());
private void goTimer()
Timer timmerTask = new Timer();
Calendar calEnviron = Calendar.getInstance();
// 每天的02:00.am开始执行
calEnviron.set(Calendar.HOUR_OF_DAY, 2);
calEnviron.set(Calendar.MINUTE, 00);
// date为制定时间
Date dateSetter = new Date();
dateSetter = calEnviron.getTime();
// nowDate为当前时间
Date nowDateSetter = new Date();
// 所得时间差为,距现在待触发时间的间隔
long intervalEnviron = dateSetter.getTime() - nowDateSetter.getTime();
if (intervalEnviron < 0)
calEnviron.add(Calendar.DAY_OF_MONTH, 1);
dateSetter = calEnviron.getTime();
intervalEnviron = dateSetter.getTime() - nowDateSetter.getTime();
// 每24小时执行一次
timmerTask.schedule(new UseTimer(timmerTask), intervalEnviron, 1 * 1000 * 60 * 60 * 24);
第二个类:
package com.listener;
import java.util.Timer;
import java.util.TimerTask;
/**
* 被调用执行类
*
* @author Administrator
*
*/
public class UseTimer extends TimerTask
Timer timer = new Timer();
public UseTimer(Timer timer)
this.timer = timer;
/*
* 被调用具体的方法
*/
public void run()
System.out.println("开始具体执行!");
不懂得话可以追问!追问
那用spring mvc 怎么写啊,谢谢
追答一样的啊,spring mvc也算是javaweb项目吧,那web-inf目录下也有web.xml文件吧,项目也得有java代码吧,所以参照上面方式可以应用到spring mvc中;
web.xml里面加上一个listener配置:
com.InitListener
上面的com.InitListener对应到java代码的IninListener类,还有UseTimer也要加上,就行了!
public class TimerManager
//时间间隔
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
public TimerManager()
Calendar calendar = Calendar.getInstance();
/*** 定制每日2:00执行方法 ***/
calendar.set(Calendar.HOUR_OF_DAY, 2);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date date=calendar.getTime(); //第一次执行定时任务的时间
//如果第一次执行定时任务的时间 小于 当前的时间
//此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date()))
date = this.addDay(date, 1);
Timer timer = new Timer();
NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。
timer.schedule(task,date,PERIOD_DAY);
// 增加或减少天数
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 NFDFlightDataTimerTask extends TimerTask
private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
@Override
public void run()
try
//在这里写你要执行的内容
catch (Exception e)
log.info("-------------解析信息发生异常--------------");
public class NFDFlightDataTaskListener implements ServletContextListener
public void contextInitialized(ServletContextEvent event)
new TimerManager();
public void contextDestroyed(ServletContextEvent event)
然后要在web.xml里面配置监听器
<listener>
<listener-class>
com.listener.NFDFlightDataTaskListener
</listener-class>
</listener> 参考技术B import java.io.IOException;
import java.util.Timer;
public class TimerTest
public static void main(String[] args)
Timer timer = new Timer();
//在1秒后执行此任务,每次间隔2秒
//如果传递一个Date参数,就可以在某个固定的时间执行这个任务.
//例如构建一个今天凌晨的Date,为参数1,参数2为24小时后重复执行此任务。
timer.schedule(new MyTask(), 1000, 2000);
while(true)//这个是用来停止此任务的,否则就一直循环执行此任务了
try
int ch = System.in.read();
if(ch-'c'==0)
timer.cancel();//使用这个方法退出任务
catch (IOException e)
e.printStackTrace();
static class MyTask extends java.util.TimerTask
@Override
public void run()
//这里是你要执行的方法
System.out.println("________");
追问
我的没有main方法,想要的的是只要启动tomcat就能运行,请指教哈,谢谢
追答这根本不是问题啊。我这只是个例子,所以写个main方法执行。你当然可以不用main方法。
tomcat中直接写个监听器就可以随tomcat启动运行了。
spring定时任务
追问能给个例子吗,谢谢哈
以上是关于java定时器 每天凌晨 固定执行一个方法的主要内容,如果未能解决你的问题,请参考以下文章