Chúng tôi đang nhận được một CommunicationException (từ DBCP) sau khi iding một thời gian (một vài giờ). Thông báo lỗi (trong Ngoại lệ) là ở phần cuối của câu hỏi này - nhưng tôi không thấy wait_timeout được định nghĩa trong bất kỳ tệp cấu hình nào. (Chúng ta nên tìm đâu? Một nơi nào đó nằm ngoài thư mục tomcat/conf?).Cấu hình Tomcat bằng cách sử dụng DBCP
Thứ hai, như được đề xuất bởi Ngoại lệ, nơi nào người ta đặt "Kết nối/thuộc tính kết nối J 'autoReconnect = true'"? Đây là định nghĩa tài nguyên trong tệp conf/context.xml trong thiết lập tomcat:
<Resource name="jdbc/TomcatResourceName" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true"
username="xxxx" password="yyyy"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/dbname?autoReconnect=true"/>
Thứ ba, tại sao JVM đợi cho đến khi cuộc gọi đến executeQuery() để ném ngoại lệ? Nếu kết nối đã hết thời gian, phương thức getConnection sẽ ném Ngoại lệ, phải không? Đây là phần của mã nguồn tôi đang nói về:
try {
conn = getConnection (true);
stmt = conn.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rset = stmt.executeQuery (bQuery);
while (rset.next()) {
....
Cuối cùng, sau đây là một vài dòng 1 của dấu vết ngăn xếp ...
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 84,160,724 milliseconds ago. The last packet sent successfully to the server was 84,160,848 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3291)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1938)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2107)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2642)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2571)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1451)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeQuery(DelegatingStatement.java:208)
Đây là những lý do một số người trong chúng ta suy nghĩ "quên dbcp, nó có thể phụ thuộc vào cấu hình IDE và ma thuật dưới mui xe mà DriverManager.getConnection (...) có thể đáng tin cậy hơn". Bất kỳ ý kiến về điều đó? Cảm ơn bạn vì thông tin chi tiết của bạn, - MS
Nếu tôi hiểu bạn đúng, DBCP giữ kết nối của nó trong hồ bơi của nó nhưng máy chủ mySql đã hết thời gian, vì vậy khi kết nối này được gửi đến ứng dụng, nó là một kết nối đóng. Làm cho tinh thần, nhưng đó là sự hiểu biết chính xác của tôi? Một q: Có bất kỳ điểm nào trong việc sử dụng validationQuery/testOnBorrow như bạn đã đề cập cũng như testWhileIdle và autoRecon ... trong tệp context.xml không? Họ đi vào tập tin đó, phải không? –
1. Hiểu biết của bạn là chính xác. Tất cả các giải pháp tôi chỉ định là bổ sung. Thiết lập một, không ngăn cản thiết lập những người khác. Belt và niềng răng là tốt hơn ;-) Tôi muốn thực hiện tất cả 3 giải pháp. kiểm tra trong khi nhàn rỗi có nghĩa là ít thời gian chờ đợi hơn tại thời điểm 'mượn'. Cài đặt thuộc tính sẽ làm giảm các ngắt kết nối không thích hợp. Có tất cả họ đi trong phần tài nguyên của context.xml webapp của bạn (sau này triển khai bởi tomcat trong $ CATALINA_HOME/conf/Catalina/localhost/yourwebapp.xml). –
autoReconnect không được khuyến nghị - http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-configuration-properties.html – OrangeDog