هل أغلق Bonecp (أو أي تجمع آخر) بيانات الاتصال عند إرجاع الاتصال إلى البركة؟

StackOverflow https://stackoverflow.com/questions/4348814

  •  30-09-2019
  •  | 
  •  

سؤال

هل أغلق Bonecp (أو أي تجمع آخر) بيانات الاتصال عند إرجاع الاتصال إلى البركة؟ كما أفهم ، لا يطلق على الطريقة الإغلاق للاتصال الفعلي ، لذلك لا يوجد إغلاق تلقائي. لذلك ، هل تغلق العبارات بأي طريقة أخرى أم أحتاج إلى إغلاقها يدويًا؟

هل كانت مفيدة؟

المحلول

مواصفات JDBC غير واضحة جدًا حول ما يجب أن يحدث تحت إغلاق الاتصال العادي ، بغض النظر عن التجمع الذي تستخدمه ، يجب عليك دائماً تأكد من إغلاق البيانات يدويًا. فكر في ما سيحدث لتطبيقك إذا اخترت التبديل إلى تجمع مختلف في المستقبل لا يفعل ما تتوقع أن تفعله لك.

فيما يتعلق Bonecp ، الإجابة هي لا ، فلن تغلق عباراتك لك على الرغم من أنه يمكن تكوينها لإغلاق اتصالاتك إذا نسيت. هذا لأسباب للأداء لأن بعض برامج تشغيل JDBC ستغلق أي بيانات لا تزال نشطة داخليًا إذا قمت بإغلاق الاتصال.

ومع ذلك ، سيغلق Bonecp أي بيانات مخزنة مؤقتًا إذا كان لديك بيانات تخزين مؤقت ممكّنة.

تحرير: اعتبارًا من V0.8.0 ، تمت إضافة الدعم لإغلاق البيانات غير المغلقة (+ PRINT OUT TRACE TRACE للموقع حيث تم فتح العبارة إذا كنت تريد).

نصائح أخرى

Bonecp (0.8.0 -rc3) ، هناك نتائج محتملة ،

أغلق مع بعض التكوين للبيان غير المقيد فقط

غير التدفق بغض النظر عن كيفية تكوينه للبيان المخزنة مؤقتًا حتى أنك تستدعي البيان. close () بشكل صريح.

هناك فئة بيان Cache لتخزين Cache the WreparedStatement & Callablestatement. تم تعطيل الافتراضي. تحتاج إلى استدعاء bonecpconfig.setStatementScachesize () مع المعلمة> 0 لتمكينها. بعد تمكين ذاكرة التخزين المؤقت ،

1 bonecp.statement.close () سوف يتجاوز البيان الأساسي إغلاق إذا تم تخزينه مؤقتًا.

  public void close() throws SQLException {
      this.connectionHandle.untrackStatement(this);
  this.logicallyClosed.set(true);
  if (this.logStatementsEnabled){
        this.logParams.clear();
        this.batchSQL = new StringBuilder();
      }

      if (this.cache == null || !this.inCache){ // no cache = throw it away right now
           this.internalStatement.close();
  }
}

2 bonecp.connection.close () سوف ببساطة مسح ذاكرة التخزين المؤقت من خلال وظيفة "ClearStatementCaches ()"

والخبر السار هو MySQL JDBC Driver ، Connector/J ، سيغلق جميع العبارات المفتوحة عند إغلاق الاتصال من خلال الوظيفة "ClosealLopenStatements ()"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top