119 votes

Comment établir un pool de connexion dans JDBC?

Quelqu'un peut-il fournir des exemples ou des liens sur la manière d'établir un pool de connexions JDBC?

En effectuant une recherche sur Google, je vois différentes façons de procéder, ce qui est plutôt déroutant.

En fin de compte, j'ai besoin du code pour renvoyer un objet java.sql.Connection , mais j'ai du mal à démarrer .. toute suggestion est la bienvenue.

Mise à jour: javax.sql ou java.sql n'a pas d'implémentations de connexion en pool? Pourquoi ne serait-il pas préférable de les utiliser?

105voto

Pascal Thivent Points 295221

Si vous avez besoin d'un autonome pool de connexion, ma préférence vas C3P0 plus de DBCP (que j'ai mentionné dans cette réponse précédente), j'ai juste eu trop de problèmes avec DBCP sous une lourde charge. À l'aide de C3P0 est mort simple. À partir de la documentation:

ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass( "org.postgresql.Driver" ); //loads the jdbc driver
cpds.setJdbcUrl( "jdbc:postgresql://localhost/testdb" );
cpds.setUser("swaldman");
cpds.setPassword("test-password");

// the settings below are optional -- c3p0 can work with defaults
cpds.setMinPoolSize(5);
cpds.setAcquireIncrement(5);
cpds.setMaxPoolSize(20);

// The DataSource cpds is now a fully configured and usable pooled DataSource 

Mais, si vous exécutez l'intérieur d'un serveur d'application, je vous conseille d'utiliser l'intégré dans le pool de connexion qu'il fournit. Dans ce cas, vous devez le configurer (reportez-vous à la documentation de votre serveur d'application) et de récupérer une source de données via JNDI:

DataSource ds = (DataSource) new InitialContext().lookup("jdbc/myDS");

19voto

Tendayi Mawushe Points 10335

Habituellement, si vous avez besoin d'un pool de connexion vous écrivez une application qui s'exécute dans certains environnement géré, c'est que vous êtes en cours d'exécution à l'intérieur d'un serveur d'application. Si c'est le cas, assurez-vous de vérifier ce que le regroupement de connexion des installations de votre serveur d'applications fournitavant d'essayer d'autres options.

L'out-of-the-box est la solution la mieux intégré avec le reste de l'application des serveurs installations. Si toutefois vous n'êtes pas en cours d'exécution à l'intérieur d'un serveur d'applications que je vous recommande l' Apache Commons DBCP Composant. Il est largement utilisé et fournit tous la base groupement de la fonctionnalité de la plupart des applications exigent.

18voto

Alexander Pogrebnyak Points 24964

Ne pas réinventer la roue.

Essayez l'une des facilement disponibles 3ème partie des composants:

  • Apache DBCP - Ce qu'on est utilisé en interne par Tomcat, et par sincèrement vôtre.
  • c3p0

Apache DBCP est livré avec différents exemple de configuration d'un groupement de javax.sql.Source de données. Voici un exemple qui peut vous aider à obtenir commencé.

17voto

Eric Hauser Points 3446

Je vous conseille d'utiliser les communes-dbcp de la bibliothèque. Il existe de nombreux exemples répertoriés sur la façon de l'utiliser, voici le lien pour le passage simple. L'utilisation est très simple:

 BasicDataSource ds = new BasicDataSource();
 ds.setDriverClassName("oracle.jdbc.driver.OracleDriver")
 ds.setUsername("scott");
 ds.setPassword("tiger");
 ds.setUrl(connectURI);
 ...
 Connection conn = ds.getConnection();

Vous avez seulement besoin de créer la source de données une fois, alors assurez-vous de lire la documentation si vous ne savez pas comment le faire. Si vous n'êtes pas conscients de la façon d'écrire correctement JDBC états de sorte que vous n'avez pas de fuite de ressources, vous pouvez aussi envie de lire cet Wikipédia page.

7voto

Powerlord Points 43989

Dans le serveur d'application, nous utilisons où je travaille (Oracle Application Server 10g, comme je le rappel), la mise en commun est géré par le serveur d'application. Nous avons récupérer un javax.sql.DataSource à l'aide d'une recherche JNDI avec un javax.sql.InitialContext.

il fait quelque chose comme ceci

try {     
   context = new InitialContext();
   jdbcURL = (DataSource) context.lookup("jdbc/CachedDS");
   System.out.println("Obtained Cached Data Source ");
}
catch(NamingException e)   
{  
    System.err.println("Error looking up Data Source from Factory: "+e.getMessage());
}

(Nous n'avons pas d'écrire ce code, il est copié à partir de cette documentation.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X