Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

JDBC MySql कनेक्शन पूलिंग अभ्यास समाप्त कनेक्शन पूल से बचने के लिए

अपवाद एप्लिकेशन कोड के एक विशिष्ट मामले को इंगित करता है जो डेटाबेस कनेक्शन को लीक करता है। आपको यह सुनिश्चित करना होगा कि आप और . प्राप्त कर लें उन सभी को बंद करें (Connection , Statement और ResultSet ) एक try-with-resources में सामान्य JDBC मुहावरे के अनुसार उसी विधि ब्लॉक में ब्लॉक करें।

public void create(Entity entity) throws SQLException {
    try (
        Connection connection = dataSource.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL_CREATE);
    ) { 
        statement.setSomeObject(1, entity.getSomeProperty());
        // ...
        statement.executeUpdate();
    }
}

या जब आप Java 7 पर नहीं हों, तो try-finally . में खंड मैथा। उन्हें finally में बंद करना गारंटी देगा कि अपवादों के मामले में वे भी बंद हैं।

public void create(Entity entity) throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;

    try { 
        connection = dataSource.getConnection();
        statement = connection.prepareStatement(SQL_CREATE);
        statement.setSomeObject(1, entity.getSomeProperty());
        // ...
        statement.executeUpdate();
    } finally {
        if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
        if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
    }
}

हां, कनेक्शन पूलिंग का उपयोग करते समय भी आपको अभी भी कनेक्शन स्वयं बंद करने की आवश्यकता है। शुरुआत करने वालों के बीच यह एक सामान्य गलती है कि वे सोचते हैं कि यह स्वचालित रूप से बंद को संभाल लेगा। यह सच नहीं है . कनेक्शन पूल अर्थात् एक लपेटा हुआ कनेक्शन देता है जो निम्न में कुछ ऐसा करता है ():

public void close() throws SQLException {
    if (this.connection is still eligible for reuse) {
        do not close this.connection, but just return it to pool for reuse;
    } else {
        actually invoke this.connection.close();
    }
}

उन्हें बंद नहीं करने से कनेक्शन को पुन:उपयोग के लिए पूल में वापस नहीं छोड़ा जाएगा और इस प्रकार यह बार-बार एक नया प्राप्त करेगा जब तक कि डीबी कनेक्शन से बाहर नहीं हो जाता है जिससे आपका एप्लिकेशन क्रैश हो जाएगा।

यह भी देखें:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL में ibdata1 फ़ाइल को कैसे सिकोड़ें/शुद्ध करें?

  2. MySQL - स्ट्रिंग लंबाई के आधार पर डेटा का चयन कैसे करें

  3. प्रदर्शन को बढ़ावा देने के लिए mysql

  4. MySQL ग्रेट सर्कल डिस्टेंस (हावर्सिन फॉर्मूला)

  5. MySQL कॉलम जोड़ें