2012-08-14 7 views
5

मेरे पास बोनसीपी के साथ mysql कनेक्शन पूल करने के लिए एक एप्लिकेशन स्थापित है। अभी, एप्लिकेशन को उपयोग का एक टन नहीं मिल रहा है, इसलिए कनेक्शन अक्सर उपयोग नहीं किया जाता है। समय की एक निश्चित राशि के बाद, प्रश्नों है कि एक बार काम किया, असफल होना शुरू, और मैं इस के लिए इसी तरह के संदेश मिलता है:जावा बोनसीपी MySQL कनेक्शन समय

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) 

मैं इस तरह BoneCP की स्थापना कर रहा हूँ:

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); 

मैं अनिश्चित हूँ mysql सर्वर के लिए टाइमआउट क्या है यह पता लगाने के लिए (यह डिफ़ॉल्ट रूप से जो भी बदला गया है) से नहीं बदला गया है, लेकिन मुझे कनेक्शन त्रुटि गतिविधि के लगभग 5 या 10 मिनट के बाद यह त्रुटि मिलती है, जो बहुत कम लगता है।

उत्तर

5

या तो आप mysqls निष्क्रिय समयबाह्य (wait_timeout की स्थापना = एक्स/interactive_timeout = एक्स) कॉन्फ़िगर करना होगा, या आप जीवित-रखें बयान जारी करने के लिए कनेक्शन पूल कॉन्फ़िगर कर सकते हैं:

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

रखना और के लिए धन्यवाद जीवित कथन भाग, और MySQL निष्क्रिय टाइमआउट के लिए चर नाम। मैंने उन दोनों की जांच की, और वे दोनों 8hrs के डिफ़ॉल्ट पर हैं। और अभी परीक्षण में मैं कर रहा हूं, कार्यक्रम केवल 30 मिनट अधिकतम घंटे के लिए चल रहा है। मैं जीवित बयान जारी करने की कोशिश करूंगा और आपको बता दूंगा! – Nick

+0

ऐसा लगता है कि समस्या ठीक हो गई है! धन्यवाद! – Nick

संबंधित मुद्दे