sql >> Database teknologi >  >> RDS >> PostgreSQL

tomcat 7 JDBC-forbindelsespulje - separat pulje for hver database?

Okay, jeg gravede lidt og fandt ud af det selv. (Tak for de mange venlige mennesker på tomcat-brugernes mailingliste!)

JB Nizet har ret:Hvis du opretter Tomcat-databaseforbindelsespuljer fra Java-kode, er/repræsenterer hver DataSource, du instanserer, bogstaveligt talt en separat forbindelsespulje. Dette var overraskende for mig; kommer fra en .NET-baggrund, antog jeg, at Tomcat-forbindelsespooling ville fungere som SqlServer/ADO.NET-forbindelsespooling:hvis du bruger to identiske forbindelsesstrenge til at få to databaseforbindelser, vil disse begge komme fra den samme forbindelsespulje. Men i Tomcat, når DataSource-objekter instansieres fra Java-kode, er hver ny DataSource-instans en helt ny forbindelsespulje. Så hvis du vil bevare disse forbindelsespuljer på tværs af JAX-RS-webservicekald, skal du for eksempel bygge din egen database-pool (DataSource) cache, lægge DataSource-forekomsterne (én pr. database) ind i den og gemme den i et objekt, som JAX-RS vil bestå på tværs af webservicekald. Jeg har lige gjort dette, og det fungerer fint.

BTW, Tomcat-databaseforbindelsespooling tilbyder funktionalitet svarende til SqlServer/ADO.NET-forbindelsespooling, du skal bare bruge JNDI-ressourcer til at oprette dine DataSource-instanser. (I mit tilfælde er dette ikke en mulighed, da databaser oprettes dynamisk i min applikation, og JNDI-definitioner er generelt oprettet ud fra konfigurationsfiler, som Tomcat læser ved opstart.)




  1. SQL-strengsammenligning, større end og mindre end operatorer

  2. MYSQL:Kan du trække resultater, der matcher som 3 ud af 4 udtryk?

  3. Filtrer Power BI-rapport baseret på nuværende bruger

  4. SQL - Erstatning af dubletværdi med tom