web项目中都是短连接,无法根据连接的开启与断开做判断,只能简单的根据session的创建与销毁来判断在线人数,做不到实时统计。
好了,直接上代码
#1、springboot的启动类加上@ServletComponentScan注解
#2、创建一个监听器
@WebListener
public class OnlineSessionListener implements HttpSessionListener {
private Logger logger = LoggerFactory.getLogger(getClass());
@Override
public void sessionCreated(HttpSessionEvent se) {
//此处人数+1
int curCount = SessionManager.incr(se.getSession().getId());
logger.info("当前登录人数,{}", curCount);
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
String uid = (String) se.getSession().getAttribute("uid");
//此处人数-1
int curCount = SessionManager.decr(se.getSession().getId(), (String) se.getSession().getAttribute("ip"));
//此处可以调用service做一些下线操作
//获取Bean只能从静态方法中获取ApplicationContext,然后取到bean,不能采用注入的方式
ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(se.getSession().getServletContext());
IUserService userService = applicationContext.getBean(IUserService.class);
userService.offline(uid);
logger.info("当前登录人数,{}", curCount);
}
}
#3、主体方法已结束,在application.yml上把session时间配置短点,方便测试
server:
servlet:
timeout: 600s