2015-11-09 3 views
1

J'ai récemment utilisé HikariCP. Avant d'utiliser mon propre ConnectionPool pour répondre à nos besoins. Dans notre logiciel, nous devons parfois effectuer plusieurs insertions de bases de données où chaque insertion dépend d'une validation. À l'ancienne, lorsque j'utilisais mon propre pool de connexions, je définissais toujours l'objet de connexion sur setAutoCommit (false) avant de le donner à l'objet Le gestionnaire de base de données peut restaurer manuellement les données en cas de problème. Comme dans l'exemple, si l'essai intercepte des exceptions, il appelle la fonction de restauration. Lorsque je renvoie la connexion, j'appelle connection.commit() dans la connexion return et initialise autocommit à true dans le gestionnaire de pool de connexions.L'utilisation de HikariCP autocommit est-elle la même que l'utilisation automatique de la connexion Java?

Ma question: Est-ce que HikariCP utilise toujours la même procédure pour mes besoins? En d'autres termes, définissez l'autocommit sur false (j'ai lu le manuel, vous avez des paramètres autocommit pour votre configuration), puis nous annulons ou validons manuellement la transaction, puis revenons au pool. Ou y a-t-il une automatisation où nous pouvons simplement lancer une exception et HikariCP appellera automatiquement l'annulation en cas d'erreur ou appellera la validation au retour de la connexion si je ne mets pas le paramètre config pour Autocommit = false?

Merci pour toute information. Rendra

Répondre

1

Le comportement de validation automatique de HikariCP est identique à celui d'un pool. Si autoCommit = false, vous êtes responsable de commit/rollback dans un try-finally. Donc, oui, vous venez de valider/restaurer, puis de renvoyer la connexion au pool. En réalité, si autoCommit = false et que vous exécutez des requêtes sans valider, HikariCP annulera automatiquement le retour au pool. Cependant, c'est pour la sécurité et je vous décourage de coder basé sur ce comportement. Cela rendra votre code moins portable si vous choisissez de changer de pool.

+0

Salut Brett. Désolé pour le long temps pas de réponse. Je suis intrigué par votre affirmation selon laquelle vous déconseillez de configurer autocommit = false. Dans mon cas où j'ai des chaînes de tables qui doivent être mises à jour complètement avant qu'une transaction soit considérée comme réussie, ne serait-il pas autocommit provoquer une mise à jour partielle? Par exemple, dans mon service Web, il mettrait à jour la table 1, puis la table 2, puis la table 3. Si l'une des mises à jour de table (disons tableau 2 ou 3) échouait, je souhaiterais annuler toutes les transactions dans les tables. le même processus/service. –

+1

Je ne dis pas n'utilise pas autoCommit = false. Je veux simplement m'assurer de commettre vos transactions, sinon HikariCP les relancera. – brettw