java - टॉमकेट JDBC Conencton Pool+MySQL "टूटी पाइप" समस्याओं का भी कनेक्शन सत्यापन के साथ देता है




tomcat connection-pooling (2)

आपको 'testOnBorrow' को 'सही' और 'अधिकतमएज' को सर्वर के कॉन्फ़िगर 'wait_timeout' से भी कम सेट करना होगा, जैसा कि संदेश में संकेत दिया गया है।

मैं विश्वसनीयता हासिल करने के लिए टॉमकेट जेडीबीसी कनेक्शन पूल को कॉन्फ़िगर करने के साथ लड़ रहा हूं। वर्तमान समस्या यह है कि परीक्षण के माहौल में मेरे पास वेबएप में ऐसे स्कैनरियो हैं:

  • दिन 1: सब कुछ ठीक काम करता है
  • दिन 2: वेबएफ़ MySQL के साथ कई घंटों के लिए कॉन्युट नहीं कर सकता है, लॉग्स में बहुत से "टूटी पाइप"
  • दिन 3: आश्चर्यजनक रूप से, सब कुछ ठीक ठीक काम करता है (बिना अनाज या पुनरारंभ)

मैंने validationInterval को कॉन्फ़िगर किया है validationInterval , validationQuery , validationTimeout , validationTimeout यह मेरा डेटा स्रोत कॉन्फ़िग है:

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource"
    destroy-method="close">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="username" value="${dbUser}" />
    <property name="password" value="${dbPass}" />
    <property name="url" value="${dbUrl}" />
    <property name="defaultAutoCommit" value="false" />
    <property name="defaultTransactionIsolation">
    <util:constant static-field="java.sql.Connection.TRANSACTION_SERIALIZABLE" />
    </property>

    <property name="maxActive" value="300" />
    <property name="maxIdle" value="25" />
    <property name="initialSize" value="5" />

    <property name="validationInterval" value="5000" />
    <property name="validationQuery" value="SELECT 1"/>
    <property name="validationQueryTimeout" value="3" />

    <property name="minIdle" value="5" />
    <property name="initSQL" value="SET time_zone = '+00:00';" />
</bean>

मेरे पास autoReconnect=true पैरामीटर कनेक्शन URL में नहीं है, केवल UTF8 एन्कोडिंग

सटीक त्रुटि है:

Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:
The last packet successfully received from the server was 38,700,615
milliseconds ago.  The last packet sent successfully to the server was
38,700,615 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.
Caused by: java.net.SocketException: Broken pipe

हमारे अनुप्रयोगों में से किसी एक के साथ हमारे पास कुछ समान समस्याएं थीं और कई खुदाई के बाद हमने निम्नलिखित सभी गुणों को सुलझाने वाले गुणों को जोड़ा:

maxAge="180000" 
testOnBorrow="true" 
testWhileIdle="true"
validationInterval="0" //forces the connection pool to validate each time a connection is given to the application




connection-pooling