日期:2014-05-18  浏览次数:20742 次

timer方法使用求助~! 急~!
我要写一个线程,让他再每天的00:00:00   这个时间开始对服务器的数据库备份。
可是TIMER这个方法不太会用。
        schedule(TimerTask   task,   Date   firstTime,   long   period)  
在我启动服务后,怎么设定Date   firstTime     这个时间呀,获取一个时间后,判断他是否时00:00:00??   谢谢高手们的帮助~~!
public   class   ScheduleListener   implements   ServletContextListener
{
        private   java.util.Timer   timer   =   null;

        public   void   contextInitialized(ServletContextEvent   sce)
        {
                timer   =   new   Timer(true);
                Date   dt   =   new   Date();
                System.out.println(dt.getTime());
                sce.getServletContext().log(new   java.util.Date()   +   "计时器已经启动... ");
                System.out.println(new   java.util.Date()   +   "             计时器已经启动... ");
                timer.schedule(new   MyTask()   ,   0   ,   2*60*1000);   //每4分钟执行一次

                sce.getServletContext().log(new   java.util.Date()   +   "计时器执行一次!!!!! ");
                System.out.println(new   java.util.Date()   +   "                     计时器执行一次!!!!! ");
        }

        public   void   contextDestroyed(ServletContextEvent   sce)
        {
                timer.cancel();
                sce.getServletContext().log(new   java.util.Date()   +   "计时器被销毁!!! ");
                System.out.println(new   java.util.Date()   +   "                     计时器被销毁!!! ");
        }
}


------解决方案--------------------
http://www.128kj.com/article/article5/6EA6E49C9C53F80FF7B059B755F9B801.htm?id=3298
------解决方案--------------------
> > > 让他再每天的00:00:00 这个时间开始对服务器的数据库备份。
> > > timer.schedule(new MyTask() , 0 , 2*60*1000); //每4分钟执行一次
为什么需要每44分钟执行一次呢?

如果希望每天零点执行,可以使用Quartz
------解决方案--------------------
是啊,推荐用Quartz
------解决方案--------------------
举个例子给你:

//每天3点执行
java.util.Date start_time = new java.util.Date(
new java.util.Date().getTime()+24*60*60*1000);
//取第二天的3点,因为有可能现在已经5点了
SimpleDateFormat sm = new SimpleDateFormat( "yyyyMMdd ");
String cur_date = sm.format(start_time)+ "030000 ";
sm = new SimpleDateFormat( "yyyyMMddHHmmss ");
start_time = sm.parse(cur_date);

timer.schedule(new SpDaily(),start_time, 24*60*60*1000);