当前位置: 代码迷 >> Java Web开发 >> 【求教】使用java的timer做定时删除,为什么不能一次性删除完所有数据,该怎么解决
  详细解决方案

【求教】使用java的timer做定时删除,为什么不能一次性删除完所有数据,该怎么解决

热度:3316   发布时间:2013-02-25 21:20:07.0
【求教】使用java的timer做定时删除,为什么不能一次性删除完所有数据
如题,我使用timer做定时删除,可以手动开启删除,手动关闭;也可以定时删除。如果想要删除的数据比较多的时候,启动删除功能,它总是无法一次性删除完毕,总是要等到下一次启动删除功能是才会继续删除刚才没删完的,而且有时候要这样好几次才能弄完。

我想设定的是一天自动删除一次,这样的话,会有很大的误差的吧。

这里面有什么很深奥的机制吗?

求大侠们帮忙!!!!!

以下是我Myclock.java和MyTask.java的源代码,我是通过Myclock.java中timer.schedule()调用MyTask.java,工程的总体架构是Struts+Hibernate,采用MySql数据库

Myclock.java
Java code
public class Myclock extends HttpServlet{    public void doGet(HttpServletRequest request,HttpServletResponse response)    throws IOException,ServletException{                           String fun = request.getParameter("fun");                ServletContext application=getServletContext();               request.setAttribute("fun", fun);               Date date=null;               DateFormat df=new SimpleDateFormat("yyyyMMddHHmmss");               String str="2012509161000";               try {                date=df.parse(str);            } catch (ParseException e) {                // TODO Auto-generated catch block            e.printStackTrace();            }            if(fun.equals("1")){               //fun是前台JSP传递过来的值,用于判断是否是手动开启timer或关闭              Timer timer=new Timer();                          [color=#FF0000] timer.schedule(new MyTask(),date,5*60*1000L);[/color]              application.setAttribute("timer",timer);                                    request.getRequestDispatcher("/jsp/administer/delData.jsp").forward(request,response) ;             }else{              Timer timer = (Timer)application.getAttribute("timer");                          timer.cancel();              application.setAttribute("timer", null);                           request.getRequestDispatcher("/jsp/administer/delData.jsp").forward(request,response) ;                          }        }    public void doPost(HttpServletRequest request,HttpServletResponse response)    throws IOException,ServletException{        doGet(request,response);    }    }


MyTask.java

Java code
public void run() {        a++;        System.out.println("***********************a==="+a+"**************************************");        GetdateFormat time1 = new GetdateFormat();        Timestamp time_now = time1.getDatetime();        System.out.println("现在时间是:"+time_now+"============");        Long oneday = 24*60*60*1000L;        Timestamp time = new Timestamp(time_now.getTime()-oneday);                List <FeedData> feedData = feedDataDao.getAllFeedDaoBeforeTime(time);        int amount=feedData.size();        if(amount!=0){            for(int i=0;i<amount+1;i++){                ;                feedDataDao.delete(feedData.get(i));                                amount--;                System.out.println("amount===="+amount);                                FeedData temp = feedData.get(i);                                                //将删除的数据存入del_data_bck表中                DelDataBackup del_data = new DelDataBackup();                del_data.setFeedDatastream(temp.getFeedDatastream());                del_data.setCvfdsdata_bck(temp.getCvfdsdata());                del_data.setCddsdatatime_bck(temp.getCddsdatatime());                System.out.println("del_data====="+del_data);                delDataBckDao.create(del_data);                                                                                //自动生成数据                feedData.get(i).setCddsdatatime(time_now);                System.out.println("新数据的修改日期为:"+temp.getCddsdatatime());                feedDataDao.create(temp);                                                 //测试时用                                 //判断是否要修改“更新日期”,此时使用的最后一次更新数据是刚刚自动生成数据时的时间;真正应该使用的是上一次的更新时间                Timestamp last_update_time = feedData.get(i).getFeedDatastream().getFeedInfo().getCdlastupdatetime();                System.out.println("该数据最后一次更新是:"+last_update_time);                                if(temp.getCddsdatatime().after(last_update_time)){                    temp.getFeedDatastream().getFeedInfo().setCdlastupdatetime(time_now);                    FeedInfo feedInfo = feedData.get(i).getFeedDatastream().getFeedInfo();                    feedDao.update(feedInfo);                    System.out.println("修改后,最后一次更新日期为:"+feedInfo.getCdlastupdatetime());                }                                                             }        }        else {System.out.println("========暂无要删除的数据!=========");}            }}
  相关解决方案