您的位置:首页 > 编程语言 > Java开发

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

2010-12-22 17:29 162 查看
近期写一个古董藏品排名更新的模块,要实时对藏品的人气数值对其进行排名.

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

然后。在做的时候。想到了使用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();

}

}

额。重启服务器.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: