2012-08-14 39 views
5

Tôi có một ứng dụng được thiết lập để kết nối các kết nối mysql với BoneCP. Hiện tại, ứng dụng không nhận được nhiều tấn, vì vậy các kết nối không được sử dụng thường xuyên. Sau một khoảng thời gian nhất định, truy vấn một lần làm việc, bắt đầu thất bại, và tôi nhận được tin nhắn tương tự như sau:Thời gian kết nối Java BoneCP MySQL ra

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 2,618,063 milliseconds ago.  The last packet sent successfully to the server was 44,734 milliseconds ago. 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
at java.lang.reflect.Constructor.newInstance(Unknown Source) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117) 
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3567) 
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3456) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3997) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2468) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2629) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2719) 
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155) 
at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379) 
at com.jolbox.bonecp.PreparedStatementHandle.execute(PreparedStatementHandle.java:138) 

tôi đang thiết lập BoneCP như thế này:

BoneCPConfig config = new BoneCPConfig(); 
config.setJdbcUrl("jdbc:mysql://" + hostname + "/" + database); 
config.setUsername(username); 
config.setPassword(password); 
config.setMinConnectionsPerPartition(minPoolSize); 
config.setMaxConnectionsPerPartition(maxPoolSize); 
config.setIdleConnectionTestPeriodInMinutes(60); 
config.setIdleMaxAgeInMinutes(240); 
config.setPartitionCount(1); 
connectionPool = new BoneCP(config); 

tôi không chắc chắn về cách tìm ra thời gian chờ cho máy chủ mysql (nó không được thay đổi từ bất kỳ mặc định nào), nhưng tôi nhận được lỗi này sau khoảng 5 hoặc 10 phút không có hoạt động của hồ bơi kết nối, có vẻ rất ngắn.

Trả lời

5

Hoặc bạn sẽ phải cấu hình mysqls Idle Timeout (thiết wait_timeout = X/interactive_timeout = X), hoặc bạn có thể cấu hình các hồ bơi kết nối để phát hành giữ-sống tuyên bố:

config.setIdleConnectionTestPeriodInMinutes(10); 
config.setConnectionTestStatement("/* ping */ SELECT 1"): 
+0

Cảm ơn keep- phần câu lệnh còn sống, và tên biến cho thời gian chờ Mysql nhàn rỗi. Tôi đã kiểm tra cả hai, và cả hai đều mặc định là 8 giờ. Và ngay bây giờ trong thử nghiệm tôi đã làm, chương trình chỉ chạy tối đa 30 phút tới một giờ. Tôi sẽ thử những phát biểu còn sống và cho bạn biết! – Nick

+0

Điều này dường như đã khắc phục được sự cố! Cảm ơn! – Nick

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