来自持久存储的异常加载会话

时间:2013-12-16 23:03:18

标签: java spring spring-mvc

我对the spring petclinic application进行了很多更改。目前,当我在使用eclipse运行的tomcat服务器的新实例中启动应用程序时,我收到以下错误消息:在服务器上运行:

SEVERE: Exception loading sessions from persistent storage  

随后服务器和应用程序能够成功启动,但我想修复导致错误消息的任何内容。任何人都可以告诉我如何通过此错误消息?

堆栈跟踪不会列出应用程序中的任何文件,因此我不知道在应用程序代码中查找的位置可以解决问题。您可以查看the petclinic code at github以查看应用程序的结构,如果这有助于您了解我应该在哪里找到问题。这是堆栈跟踪:

INFO  EhCacheManagerFactoryBean - Initializing EhCache CacheManager
INFO  ContextLoader - Root WebApplicationContext: initialization completed in 4376 ms
Dec 16, 2013 2:51:56 PM org.apache.catalina.session.StandardManager doLoad
SEVERE: IOException while loading persisted sessions: java.io.EOFException  
java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
    at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:58)
    at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:246)
    at org.apache.catalina.session.StandardManager.load(StandardManager.java:204)
    at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:491)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Dec 16, 2013 2:51:56 PM org.apache.catalina.session.StandardManager startInternal
SEVERE: Exception loading sessions from persistent storage  
java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
    at org.apache.catalina.util.CustomObjectInputStream.<init>(CustomObjectInputStream.java:58)
    at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:246)
    at org.apache.catalina.session.StandardManager.load(StandardManager.java:204)
    at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:491)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Dec 16, 2013 2:51:56 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'petclinic'  

8 个答案:

答案 0 :(得分:88)

这与Tomcat无法加载先前在早期关闭时保存的序列化Web会话有关。这可能是因为Tomcat没有干净地关闭,因此会话对象在序列化过程中被破坏。

使此错误消失的一种方法是在重新启动时禁用会话持久性。您可以通过编辑文件CATALINA_HOME/conf/context.xml并将pathname的{​​{1}}属性设置为空字符串来执行此操作。这在Tomcat 7的文件中有详细记载:

<Manager>

当Tomcat关闭时,您还应该从<!-- Uncomment this to disable session persistence across Tomcat restarts --> <Manager pathname="" /> 文件夹中删除任何旧的session.ser文件。

如果需要跨重启的会话持久性,这可能是不可接受的。在这种情况下,有必要进一步调试问题。

答案 1 :(得分:31)

删除tomcat“work”文件夹。重启tomcat服务器,希望它现在可以运行,没有任何异常或错误!

这可以通过在Tomcat中选择服务器并选择“Clean Tomcat Work Directory”

来完成

enter image description here

答案 2 :(得分:5)

只需清理Tomcat工作目录......这对我很有用。

答案 3 :(得分:3)

这只是因为Persist Class没有正确序列化只是停止Apache。同时删除项目和清理项目和服务器。

刚刚重新部署完成。祝好运。

答案 4 :(得分:1)

我在eclipse中遇到了类似的错误项目。我用这些步骤解决了这个问题:

  • 清理项目
  • 在eclipse的服务器视图中删除Tomcat服务器
  • 使用向导
  • 在eclipse的服务器视图中定义新的Tomcat服务器
  • 将项目添加到新定义的Tomcat服务器

之后,运行这个新的Tomcat服务器都运行得很好。

答案 5 :(得分:1)

- 该类应该使用serialVersionUID实现Serializable接口。 - 执行clean build并重新启动服务器

答案 6 :(得分:0)

如果您正在使用Spring Boot,只需将其添加到application.properties:

server.servlet.session.persistent=false

答案 7 :(得分:0)

在 Spring Boot 中,您的 @ResponseBody 端点上的 @GetMapping 注释。