JAVA中每隔15秒更新字段数值排名

来源:互联网 发布:以撒的结合mac破解版 编辑:程序博客网 时间:2024/06/05 18:53

近期写一个古董藏品排名更新的模块,要实时对藏品的人气数值对其进行排名.

刚开始的时候。我以为只是页面的排名,但是。我觉得应该将排名数据先保存到数据库,然后每隔一段时间进行更新,这样页面的数据会统一.

然后。在做的时候。想到了使用java.util.TimerTask 定时做任务.

步骤如下:

第一步,写一个任务类;

public class PaiMingTask extends java.util.TimerTask{

     static Logger logger = Logger.getLogger(Index.class.getName());
     
    @Override
    public void run() {
        /**
         * 做排名
         */
        try{
            List list_cpTypeList = Data.Query("SELECT TypesId FROM Antique_Types WHERE  ParentTypesId=?",new Object[]{1});
           
            System.out.println(list_cpTypeList.size()+"藏品类型个数 ");
            //此处的SQL排名,出现的数据会有重复的
            String sql="SELECT (SELECT COUNT(DISTINCT TouPiaoCount) FROM CangpinOfContest WHERE CBType=? AND JingSaiLevelId=? AND TouPiaoCount>a.TouPiaoCount)+1 AS paiming,"+
                    "CPCId,a.CBType FROM CangpinOfContest a WHERE CBType=? ORDER BY paiming";
           
            Integer currentLevel = new ContestOfCurrentQishu().getCurrentQiShu();//Integer.parseInt(GetProperties.readValue("CurrentJinSaiLevelId"));
           
            for(int count=0;count<list_cpTypeList.size();count++){
               
                List list_count=(List)list_cpTypeList.get(count);
               
                System.out.println("藏品类别:"+list_count.get(0).toString()+"进行排名");
               
                List list_cpType=Data.Query(sql,new Object[]{list_count.get(0).toString(),currentLevel,list_count.get(0).toString()});//((List)(list_cpTypeList.get(0))).get(0).toString()
               
                String sql_update="UPDATE CangPinOfContest SET BaiMing=? WHERE CPCId=?";
               
                for(int i=0;i<list_cpType.size();i++){
                   
                    List list_cpTypeObject=(List)list_cpType.get(i);
                   
                    if(Data.Update(sql_update,new Object[]{list_cpTypeObject.get(0),list_cpTypeObject.get(1)})>0){

                        System.out.println(list_cpTypeObject.get(1)+":排名"+list_cpTypeObject.get(0));
                    }
                }
            }
           
        }catch (Exception e) {
           
            logger.debug(e.toString());
           
            try {
                throw e;
            } catch (Exception e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
       
    }
}

 

然后,第二步:管理类

先写一个接口类

public interface DoPlanImpl {
   
    public void DoPlan();
}

public class PaiMingManager  implements DoPlanImpl{
   
    static Logger logger = Logger.getLogger(PaiMingManager.class.getName());
    Timer t = null;
   
    public PaiMingManager(){
       
    }
   
    public void time(int day,int hour,int min,int sec){  
         Calendar c = Calendar.getInstance();
         c.set(Calendar.DAY_OF_MONTH,day);
         c.set(Calendar.HOUR_OF_DAY,hour);
         c.set(Calendar.MINUTE,min);
         c.set(Calendar.SECOND,sec);
         Date date = c.getTime();
         System.out.println(c.getTime());
         t= new Timer();
         PaiMingTask mt = new PaiMingTask();
         t.schedule(mt,date); 
     }
    public void destoryTimer(){
        t.cancel();
     }

    public void DoPlan() {
        t= new Timer();

        //任务类

        PaiMingTask mt = new PaiMingTask(); 
        t.schedule(mt, Calendar.getInstance ().getTime(), 15 * 1000);
    }
}

第三步:写一个侦听

public class ContestPaiMing extends HttpServlet implements ServletContextListener{

    static Logger logger = Logger.getLogger(ContestPaiMing.class.getName());
   
    private DoPlanImpl doPlanImpl;
   
    public void contextDestroyed(ServletContextEvent arg0) {

        System.out.println("我的侦听结束"); 
    }

    @Override
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        super.service(arg0, arg1);
    }

    public void contextInitialized(ServletContextEvent arg0) {
        System.out.println("我的侦听开始");
        /**
         * 视频处理
         */
//        doPlanImpl=new TransCodeVideoManager();
//        doPlanImpl.DoPlan();
        /**
         * 排名处理
         */
          doPlanImpl=new PaiMingManager();
          doPlanImpl.DoPlan();
    }

}

额。重启服务器.

原创粉丝点击