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();
}
}
额。重启服务器.
刚开始的时候。我以为只是页面的排名,但是。我觉得应该将排名数据先保存到数据库,然后每隔一段时间进行更新,这样页面的数据会统一.
然后。在做的时候。想到了使用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();
}
}
额。重启服务器.
相关文章推荐
- Java并发学习(九)-AtomicIntegerFieldUpdater字段原子更新类
- 更新一个表,字段名不确定 java如何实现
- JAVA安装包制作神器install4j 版本更新至v6.1.5,密码字段选项添加新属性|附下载
- JAVA安装包制作神器install4j 版本更新至v6.1.5,密码字段选项添加新属性|附下载
- JAVA如何更新oracle clob字段数据
- 更新用blob字段存储照片的Java代码
- java使用MongoDB更新实体类某一字段的值
- Java并发25:Atomic系列-原子类型字段更新器AtomicXxxxFieldUpdater学习笔记
- com.linuxense.javadbf读取dbf文件并更新数据中的字段
- 更新用blob字段存储照片的Java代码
- Java更新数据库的大字段blob,包括oracle和db2
- java oracle clob字段的插入与更新
- Java获取数据库日期字段,后面有.0的解决方法。 |浏览:2416|更新:2013-06-27 17:22|标签:java 我们一般获取数据库字符串,在得到行后,就会用getString获取字符串
- java hibernate 映射和注解oracle含有blob字段的数据表的pojo源码
- EF 只更新部分字段
- JAVA使用Gson排除特定字段
- JAVA自动更新程序
- 修改Hibernate实体类字段int为Integer产生java.lang.NoSuchMethodError
- EF部分字段更新,自动忽略null字段
- java集合某个字段按照中文拼音排序