Comment définir autocommit sur false dans le modèle jdbc de printemps
Actuellement, je suis en mode autocommit à faux au printemps grâce à l'ajout d'une propriété à une source de données bean id comme ci-dessous :
<property name="defaultAutoCommit" value="false" />
Mais j'ai besoin de l'ajouter spécifiquement à une seule méthode de java avant l'exécution de ma procédure.
J'ai utilisé le code ci-dessous un extrait.
getJdbcTemplate().getDataSource().getConnection().setAutoCommit(false);
Mais la ligne ci-dessus n'a pas été paramètre de validation automatique de faux?
Ai-je raté quelque chose ?
ou toute autre alternative à set autocommit dans une méthode en java d'ici le printemps
Grâce
source d'informationauteur bad programmer
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que vous êtes paramètre de validation sur un
Connection
maisJdbcTemplate
n'oubliez pas queConnection
; au lieu de cela, il obtient un nouveauConnection
pour chaque opération, et qui pourrait ou ne pourrait pas être la mêmeConnection
exemple, selon votreDataSource
mise en œuvre. DepuisdefaultAutoCommit
n'est pas une propriété surDataSource
vous avez deux options:defaultAutoCommit
(par exemple, org.apache.commons.dbcp.BasicDataSource), la fonte de laDataSource
à votre mise en œuvre concrète. Bien sûr, cela signifie que vous ne pouvez plus modifier votreDataSource
dans votre configuration Spring, ce qui est contraire au but de l'injection de dépendance.((BasicDataSource)getJdbcTemplate().getDataSource()).setDefaultAutoCommit(false);
Définir la
DataSource
à un wrapper de mise en œuvre qui définit AutoCommit à faux à chaque fois que vous allez chercher une connexion.Vous avez besoin pour obtenir la connexion en cours. par exemple,
Je viens de tomber sur ce et a pensé que la solution serait de les aider quelqu'un, même si c'est trop tard.
Que Yossef dit, la connexion que vous pouvez obtenir en appelant
getJdbcTemplate().getDataSource().getConnection()
méthode peut ou peut ne pas être celle qui est utilisée pour la communication avec la base de données pour votre opération.Au lieu de cela, si votre exigence est de tester la qualité de votre script, pas de valider les données, vous pouvez avoir un Apache Commons DBCP source de données avec validation automatique mis à la faute. Le haricot définition est donnée ci-dessous:
Et l'utilisation de cette source de données pour de telles opérations.
Si vous souhaitez valider vos transactions, je vous suggère d'avoir un plus de haricots de la source de données avec validation automatique réglé sur
true
qui est le comportement par défaut.Espère que cela aide quelqu'un!
Vous devez le faire pour chaque déclaration que le jdbcTemplate exécute. Parce que pour chaque jdbcTemplate.execute (), etc il obtient une nouvelle connexion à partir de la source de données du pool de connexion. Ainsi, vous aurez à régler pour la connexion de la connexion la jdbcTemplate utilise pour cette requête. De sorte que vous aurez à faire quelque chose comme
Espère que cette aide