package cn.newgxu.bbs.common.listener; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; import cn.newgxu.bbs.common.util.Util; import cn.newgxu.bbs.service.UserService; /** * * @author polly * @since 4.0.0 * @version $Revision 1.1$ */ public class OnlineUserListener implements InitializingBean { private static final Log log = LogFactory.getLog(OnlineUserListener.class); // 是否需要自动执行,可被设置为false使本Linstener失效. private boolean autoRun = true; // 操作线程延时启动的时间,单位为秒 private int lazyTime = 100; private int distanceTime = 10; private UserService userService; // 索引线程 private Thread thread = new Thread() { @Override public void run() { try { Thread.sleep(lazyTime * 1000); // log.info("begin online user listener..."); while (true) { userService.cleanOnlineUser(); try { Thread.sleep(Util.ONE_MINUTE * distanceTime); } catch (InterruptedException ex) { log.error(ex); } } } catch (InterruptedException e) { log.error(e); } } }; /** * 实现<code>InitializingBean</code>接口,在完成注入后调用启动索引线程. * * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() */ public void afterPropertiesSet() throws Exception { if (autoRun) { if (userService == null) { userService = (UserService) Util.getBean("userService"); } Assert.notNull(userService, "请为userService赋值!"); thread.setDaemon(true); thread.setName("online User listener!"); thread.start(); } } public void setUserService(UserService userService) { this.userService = userService; } public void setAutoRun(boolean autoRun) { this.autoRun = autoRun; } public void setDistanceTime(int distanceTime) { this.distanceTime = distanceTime; } public void setLazyTime(int lazyTime) { this.lazyTime = lazyTime; } }