【问题标题】:Error on Tomcat Embedded startupTomcat Embedded 启动时出错
【发布时间】:2016-12-06 13:43:12
【问题描述】:

我正在开发一个 Spring Boot (v1.3.3.RELEASE) 项目。包含的 Tomcat Embedded 版本是 8.0.32。

我收到此错误:

2016-08-01 14:51:23.354 ERROR 6704 --- [ost-startStop-1] o.a.catalina.session.StandardManager     : Exception loading sessions from persistent storage

java.io.EOFException: null
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2335)
    ...

我在这个问题上读到了同样的错误:exception loading sessions from persistent storage,但我找不到我的问题的解决方案。

我尝试应用 aswers 中建议的解决方案,但在我的情况下,我找不到“清理 Tomcat 工作目录”的方法,或者只是为了干净地部署我的应用程序。

我该如何解决这个问题?我在哪里可以找到 Tomcat Embedded 版本的工作文件夹?

注意我使用 Eclipse 作为 IDE

【问题讨论】:

  • 这个错误清楚地表明在您的 spring 应用程序重新启动或关闭期间,某些文件已损坏。如果你想使用持久会话,你必须使用持久管理器正确配置它,在这个link(对于tomcat 5.5)中提到,否则一个解决方案是用这个answer完全禁用它

标签: java spring tomcat spring-boot


【解决方案1】:

我终于找到了解决问题的方法。

阅读这个问题的答案:How to disable Tomact session persistence in Spring Boot via Manager pathname?(由 AntJavaDev 建议)我配置了这个 bean:

@Bean
public EmbeddedServletContainerFactory servletContainer() {
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
    tomcat.addContextCustomizers(new TomcatContextCustomizer() {

        @Override
        public void customize(Context context) {
            if (context.getManager() instanceof StandardManager) {
                // print local path name
                System.out.println(((StandardManager) context.getManager()).getPathname());
            }
        }
    });
    return tomcat;
}

通过这种方式,我发现了 Tomcat Embedded(在 Windows 上)的缓存会话存储位置:

C:\Users\<my-user>\AppData\Local\Temp\<random-id>\servlet-sessions\

我删除了这个文件夹中的SESSIONS.ser文件,错误神奇地消失了。

【讨论】:

  • 很高兴它有帮助:),但是您仍然找到任何线索,为什么它从一开始就发生了?您是否手动杀死了spring boot应用程序?不让上下文正确关闭?
  • @AntJavaDev 是的,问题可能是由错误的应用程序停止引起的。非常感谢!
  • 文件的正确名称是“session.ser”而不是“sessions.ser”。它对我有用。谢谢。
猜你喜欢
  • 2013-12-07
  • 2017-05-21
  • 2014-05-18
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 2014-12-30
  • 2012-10-18
  • 1970-01-01
相关资源
最近更新 更多