2010-05-29 23 views
5
ứng dụng

My Java, trong đó sử dụng Hibernate và nó được tổ chức bởi Tomcat 6.0, được ngoại lệ sau đây sau một thời gian dài không hoạt động khi nó cố gắng để truy cập vào DB:Tomcat, Hibernate và java.io.EOFException

com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.io.EOFException 

STACKTRACE: 

java.io.EOFException 
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1963) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2375) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2874) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3249) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1268) 
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1403) 
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1812) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:697) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) 
    at org.hibernate.loader.Loader.doList(Loader.java:2232) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129) 
    at org.hibernate.loader.Loader.list(Loader.java:2124) 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401) 
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363) 
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) 
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1149) 
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) 

Bất kỳ mẹo nào?

Cảm ơn

+0

cũng đánh giá theo lỗi, trang này phải nói gì http://java.sun.com/j2se/1.4.2/docs/api/java/io/EOFException.html và thời gian chờ lâu sẽ dường như vì bất kỳ lý do gì khiến ứng dụng của bạn/hibernate không thể kết nối với db của bạn. Kiểm tra url db, cổng và các chi tiết đăng nhập. –

+0

Dường như Hibernate không thể kết nối lại với db khi kết nối hết hạn. Bởi vì đầu tiên nó hoạt động, sau đó sau một thời gian dài không hoạt động ngoại lệ được ném. – Mark

+0

à, đây là tùy chọn cấu hình. bạn có thể nhận được jdbc để kết nối lại nhưng tắt đầu trên không biết câu trả lời, hãy thử google http://www.google.com/search?hl=vi&q=jdbc+hibernate+reconnect –

Trả lời

3

MySQL sẽ đóng kết nối nhàn rỗi sau 8 giờ theo mặc định (các wait_timeout). Đây là một "vấn đề nổi tiếng" và bạn sẽ tìm thấy nhiều tài liệu tham khảo về nó trên internet, ví dụ this one. Vì vậy, một trong hai:

  • cấu hình tomcat để kiểm tra kết nối trên mượn sử dụng một validationQuery trong cấu hình nguồn dữ liệu:

    <parameter> 
        <name>validationQuery</name> 
        <value>select 1</value> 
    </parameter> 
    
  • tăng MySQL của wait_timeout qua my.cnf/my.ini, hoặc bằng cách kết nối với một dòng lệnh SQL client và nhập SET GLOBAL wait_timeout=86400 hoặc một số giây phù hợp khác.

Lưu ý rằng tôi không biết tất cả các hậu quả của tùy chọn thứ hai. Nếu bạn quyết định chọn tùy chọn thứ hai, tôi khuyên bạn nên đăng câu hỏi khác để nhận phản hồi từ các chuyên gia MySQL.

Các vấn đề liên quan