Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与HttpSessionListener的会话数少于零_Java_Spring_Session_Tomcat - Fatal编程技术网

Java 与HttpSessionListener的会话数少于零

Java 与HttpSessionListener的会话数少于零,java,spring,session,tomcat,Java,Spring,Session,Tomcat,我想在我的web应用程序中添加一些逻辑来检查应用程序中活动会话的数量 作为记录,我正在使用Tomcat7上提供的Spring4应用程序 这就是我实现的: public class SessionCounter implements HttpSessionListener { private static final Logger logger = LoggerFactory.getLogger(SessionCounter.class); private static fin

我想在我的web应用程序中添加一些逻辑来检查应用程序中活动会话的数量

作为记录,我正在使用Tomcat7上提供的Spring4应用程序

这就是我实现的:

public class SessionCounter implements HttpSessionListener {

    private static final Logger logger = LoggerFactory.getLogger(SessionCounter.class);

    private static final AtomicInteger ACTIVE_SESSIONS = new AtomicInteger();

    @Override
    public void sessionCreated(HttpSessionEvent event) {
        logger.debug("session count is now: " + ACTIVE_SESSIONS.incrementAndGet());
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent event) {
        int sessions = ACTIVE_SESSIONS.decrementAndGet();
        logger.debug("session count is now: " + sessions);
        if (sessions < 0) {
            logger.error("number of active sessions is less than zero ({})", sessions);
        }
    }

}
我把sessions<0部分放在云雀上,认为它永远不会达到那个点,但唉,它做到了

我知道多线程和静态非常量变量是一种特殊的技巧,但我没有看到任何明显的错误


在这段代码中,活动会话怎么可能小于零?

如何注册HttpSessionListener?为什么在sessionCreated debug消息中进行任何计算,这是非常糟糕的做法?虽然,我不确定这是问题所在。但基本上在将来,编译器可能会对此进行优化,并将您的sting组合视为lambda表达式,它将被传输到记录器,并且将仅在调试模式下进行计算。web中的test.setup.SessionCounter。xml@mavarazy我明白你的意思,实际上我在sessionDestroyed方法中避免了这一点。当然也会改变这一点,不过我怀疑这是问题的原因。请看一看,假设存在异步多线程通知的可能性,可能是在创建之前调用了destroct。例如,对于短请求,可能会发生这种情况