Est-ce BoneCP (ou tout autre pool) déclarations de connexion étroite lorsque la connexion est retourné à la piscine?

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

  •  30-09-2019
  •  | 
  •  

Question

Est-ce que BoneCP (ou tout autre pool) déclarations de connexion à proximité lorsque la connexion est retourné à la piscine? Si je comprends bien, il ne remet pas la méthode de connexion réelle à proximité, donc il n'y a pas de clôture de l'instruction automatique. Alors, est-il des déclarations à proximité d'une autre manière ou ai-je besoin de les fermer manuellement?

Était-ce utile?

La solution

La spécification JDBC est très claire sur ce qui devrait se produire dans le cadre normale près donc, quelle que soit la piscine que vous utilisez, vous devez toujours assurez-vous de fermer les comptes manuellement. Pensez à ce qui arriverait à votre demande si vous optez pour passer à une autre piscine à l'avenir qui ne fait pas ce que vous attendez qu'il fasse pour vous.

En ce qui concerne BoneCP, la réponse est non, il ne fermera pas vos déclarations pour vous mais il peut être configuré pour fermer vos connexions si vous oubliez. Ceci est pour des raisons de performances, car certains pilotes JDBC fermeront toutes les déclarations encore actifs en interne si vous fermer la connexion.

Cependant, BoneCP fermeront les instructions mises en cache si vous avez des déclarations de mise en cache activée.

EDIT:. Comme de v0.8.0, un soutien a été ajouté à fermer des déclarations non fermées (+ imprimer trace de la pile de l'emplacement où la déclaration a été ouverte si vous voulez)

Autres conseils

BoneCP (0.8.0 -RC3), il y a 2 résultats possibles,

obturent avec une certaine configuration pour non-déclaration en cache uniquement

non obturent peu importe la façon dont vous configurez pour instruction mise en cache même vous invoquez le statement.close () explicitement.

Il y a une classe StatementCache à cache PreparedStatement et CallableStatement. La valeur par défaut est désactivé. Vous avez besoin d'appeler BoneCPConfig.setStatementsCacheSize () avec le> 0 paramètre pour l'activer. Après activer le cache,

1 BoneCP.Statement.Close () contournera la fin de la déclaration sous-jacente si elle est mise en cache.

  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 () Est-ce que tout simplement effacer le cache via la fonction « clearStatementCaches () »

Les bonnes nouvelles sont pilote JDBC MYSQL, connecteur / J, fermera toutes les déclarations ouvertes lorsque vous fermez la connexion via la fonction « closeAllOpenStatements () »

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top