Quelqu'un peut-il expliquer comment le regroupement de connexions exactement préparé à l'aide de dbcp peut être utilisé? (avec un exemple de code si possible). J'ai compris comment l'activer - en passant une KeyedObjectPoolFactory à la PoolableConnectionFactory. Mais comment les instructions préparées spécifiques doivent-elles être définies après cela? En ce moment j'utilise seulement un PoolingDataSource pour obtenir des connexions du pool. Comment utiliser les instructions préparées du pool?Utilisation de la mise en pool PreparedStatement dans dbcp
Répondre
En parlant bien d'obtenir une connexion du pool par rapport à une connexion "non-pooled", avez-vous des changements dans votre code :)? Je parie que non. De la même manière avec les déclarations préparées. Votre code ne devrait pas changer. Donc, il n'y a pas d'exemple de code utile à cela.
Vous devriez lire des documents pour votre implémentation de la source de données JDBC et voir ce que les développeurs ont à dire sur le pooling. Il n'y a pas d'autre source d'informations fiables à ce sujet.
De here: Ce composant a également la capacité de regrouper PreparedStatements. Lorsqu'elle est activée, un pool de déclaration sera créé pour chaque connexion et PreparedStatements créé par l'une des méthodes suivantes seront mises en commun:
* public PreparedStatement prepareStatement(String sql)
* public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
Donc, vous continuez à l'aide d'appel et que votre dbcp prepareStatement() sera en théorie prendre en charge pooling (c.-à-d. si vous essayez de créer "select * from users où u.name like: id", il essaiera de trouver cette instruction dans le pool)
Vraiment? Alors pourquoi la PoolableConnectionFactory a-t-elle un paramètre pour le pooling d'instructions? De toute évidence, il doit y avoir un moyen de le mettre en place. Apache - comme d'habitude - ne sert à rien. – sproketboy
@Dan: Voulez-vous développer votre commentaire? Dans quelle partie de ma réponse n'êtes-vous pas d'accord? Si vous relisez la question, l'auteur sait déjà comment activer la mise en pool des instructions. Il s'interroge sur les changements qu'il doit apporter dans le code, le cas échéant. –
Désolé était juste grincheux en raison du manque habituel de documentation à Apache. – sproketboy
Voici le code de base que j'utilise.
GenericObjectPool connectionPool = new GenericObjectPool(null);
connectionPool.setMinEvictableIdleTimeMillis(1000 * 60 * 30);
connectionPool.setTimeBetweenEvictionRunsMillis(1000 * 60 * 30);
connectionPool.setNumTestsPerEvictionRun(3);
connectionPool.setTestOnBorrow(true);
connectionPool.setTestWhileIdle(false);
connectionPool.setTestOnReturn(false);
props = new Properties();
props.put("user", username);
props.put("password", password);
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(url, props);
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, connectionPool, null, "SELECT 1", false, true);
PoolingDataSource dataSource = new PoolingDataSource(connectionPool);
Cela ne peut pas être vrai. Passer null pour le troisième argument de PoolableConnectionFactory désactive la mise en cache PreparedStatement, conformément à http://commons.apache.org/dbcp/apidocs/org/apache/commons/dbcp/PoolableConnectionFactory.html#PoolableConnectionFactory(org.apache.commons.dbcp. ConnectionFactory, org.apache.commons.pool.ObjectPool, org.apache.commons.pool.KeyedObjectPoolFactory, java.lang.String, booléen, booléen). Qu'est-ce qui devrait être utilisé pour cet argument? –
La chose est si vous utilisez un seul Connection
, il cache PreparedStatement
s si vous voulez ou non, le seul moyen d'avoir un impact sur est d'utiliser DataSource
propriétés ou à utiliser l'API spécifique au fournisseur. Mais ces instructions ne sont pas visibles par d'autres connexions et si vous préparez la même instruction en utilisant une autre connexion, elle la recréera à nouveau. Donc, les pools de connexion comme DBCP sous le capot permettent de réutiliser PreparedStatement
entre différentes connexions (il utilise l'interface PooledConnection
au lieu du simple Connection
), ils gardent une trace de toutes les instructions préparées par toutes les connexions.
MISE À JOUR: il semble que j'avais tort sur cette information, au moins je ne pouvais pas trouver cette fonctionnalité dans C3P0.
- 1. Mise en pool de connexion tomcat
- 2. Mise en pool de connexion Hibernate/mysql
- 3. impossible de mettre à jour CLOB à l'aide de la connexion DBCP
- 4. PreparedStatement setNull (..)
- 5. Problème de validation de connexion DBCP
- 6. Mise en cache Asp.net et utilisation de la mémoire W3P
- 7. Phusion Passenger et la mise en pool de base de données
- 8. Comment réduire le pool de connexions DB?
- 9. Comment fonctionne PreparedStatement de Java?
- 10. Comment puis-je déterminer le nombre de connexions requises pour la mise en pool des connexions?
- 11. Réutilisation d'un PreparedStatement
- 12. Utilisation subquerys dans la déclaration de mise à jour
- 13. Connexion de pool dans asp.net
- 14. Utilisation de Sketchflow Expression Blend - Pertinence pour la mise en œuvre de la programmation Silverlight?
- 15. Comment utiliser system_user dans le déclencheur d'audit tout en utilisant le pool de connexions?
- 16. app pool identity - administrateur de la batterie
- 17. Mise en surbrillance de la syntaxe OpenOffice
- 18. Utilisation de Avg() avec la mise à jour SQL
- 19. Pool de connexion DB simultané dans Haskell
- 20. Comment implémenter le pool de proxy WCF?
- 21. Utilisation et mise en forme d'un flux RSS
- 22. IOCP dans le pool de threads personnalisés
- 23. JDBC, MySQL: revenir données de ligne de PreparedStatement exécute
- 24. Utilisation de Silverlight 2 pour la mise en cache audio courte
- 25. Erreur de pool d'applications
- 26. composante reprise de téléchargement de fichiers pour une utilisation dans la mise à jour automatique
- 27. Comment associer une ArrayList à PreparedStatement dans Oracle?
- 28. Surveiller SQL actuellement dans le pool partagé en utilisant Toad
- 29. Syntaxe Mise en évidence
- 30. Utilisation de la mémoire dans la R
Que transmettez-vous pour KeyedObjectPoolFactory? Le constructeur de GenericKeyedObjectPoolFactory nécessite une KeyedPoolableObjectFactory, et je ne vois pas comment créer l'un de ceux qui utiliseront la connexion pour laquelle PreparedStatement est destiné. –