www.pudn.com > Community_open20061104.rar > ForumSchedulerUnit.java~16~
package com.redmoon.forum; import cn.js.fan.kernal.BaseSchedulerUnit; import cn.js.fan.util.ErrMsgException; import cn.js.fan.db.Conn; import cn.js.fan.web.Global; import java.sql.ResultSet; import java.sql.SQLException; import org.apache.log4j.Logger; import java.util.Date; import java.sql.PreparedStatement; import com.redmoon.forum.message.MessageDb; /** *Title:
* *Description:
* *Copyright: Copyright (c) 2005
* *Company:
* * @author not attributable * @version 1.0 */ public class ForumSchedulerUnit extends BaseSchedulerUnit { static Logger logger = Logger.getLogger(ForumSchedulerUnit.class.getName()); static int refreshOnlineInterval = 5; // 5分钟 static long lastRefreshOnlineIntervalTime; static long lastClearUserMessageInerval = System.currentTimeMillis(); static long clearUserMessageInterval = 86400000; // 每隔24小时清除用户超出容量的短信息 static int message_expire_day = 150; // 天 static { Config cfg = new Config(); refreshOnlineInterval = cfg.getIntProperty("forum.refreshOnlineInterval"); message_expire_day = cfg.getIntProperty("forum.message_expire_day"); clearUserMessageInterval =cfg.getIntProperty("interval_clear_message"); name = "论坛调度器"; } public ForumSchedulerUnit() { lastTime = System.currentTimeMillis(); interval = 600000; // 每隔10分钟刷新一次 lastRefreshOnlineIntervalTime = System.currentTimeMillis(); lastClearUserMessageInerval = System.currentTimeMillis(); } /** * OnTimer * * @param currentTime long * @todo Implement this cn.js.fan.kernal.ISchedulerUnit method */ public void OnTimer(long curTime) { // logger.info("curTime=" + curTime); if (curTime-lastTime>=interval) { action(); lastTime = curTime; } if (curTime-lastRefreshOnlineIntervalTime>=refreshOnlineInterval) { OnlineUserDb oud = new OnlineUserDb(); oud.refreshOnlineUser(); lastRefreshOnlineIntervalTime = curTime; } if (curTime - lastClearUserMessageInerval >= clearUserMessageInterval) { clearMessageExpired(message_expire_day); lastClearUserMessageInerval = curTime; } } public void clearMessageExpired(int expireDay) { MessageDb md = new MessageDb(); md.clearMessageExpired(expireDay); } public synchronized void action() { refreshColor(); refreshBold(); } public void refreshBold() { MsgDb md = new MsgDb(); String sql = "select id from sq_message where isBold=1 and boldExpire"; // 如果加粗显示已到期 Conn conn = new Conn(Global.defaultDB); ResultSet rs = null; try { PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, "" + System.currentTimeMillis()); rs = conn.executePreQuery(); while (rs.next()) { int id = rs.getInt(1); // logger.info("msgRootId=" + msgRootId); md = md.getMsgDb(id); try { md.ChangeBold(id, 0, new Date()); } catch (ErrMsgException e) { logger.error("action:" + e.getMessage()); } } } catch (SQLException e) { logger.error("refreshBold:" + e.getMessage()); } finally { if (conn != null) { conn.close(); conn = null; } } } public void refreshColor() { MsgDb md = new MsgDb(); String sql = "select id from sq_message where color<>'' and colorExpire"; // 如果颜色值已到期 Conn conn = new Conn(Global.defaultDB); ResultSet rs = null; try { PreparedStatement ps = conn.prepareStatement(sql); ps.setString(1, "" + System.currentTimeMillis()); rs = conn.executePreQuery(); // logger.info("rs=" + rs); while (rs.next()) { int id = rs.getInt(1); // logger.info("msgRootId=" + msgRootId); md = md.getMsgDb(id); try { md.ChangeColor(id, "", new Date()); } catch (ErrMsgException e) { logger.error("refreshColor:" + e.getMessage()); } } } catch (SQLException e) { logger.error("refreshColor1:" + e.getMessage()); } finally { if (conn != null) { conn.close(); conn = null; } } } }