PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Tomcat 7 JDBC-Verbindungspool - separater Pool für jede Datenbank?

Okay, ich habe etwas gegraben und das selbst herausgefunden. (Danke für die vielen freundlichen Leute auf der Tomcat-Users-Mailingliste!)

JB Nizet hat Recht:Wenn Sie Tomcat-Datenbank-Verbindungspools aus Java-Code erstellen, ist jede DataSource, die Sie instanziieren, buchstäblich ein separater Verbindungspool. Das war für mich überraschend; Da ich von einem .NET-Hintergrund komme, ging ich davon aus, dass das Tomcat-Verbindungspooling wie das SqlServer/ADO.NET-Verbindungspooling funktionieren würde:Wenn Sie zwei identische Verbindungszeichenfolgen verwenden, um zwei Datenbankverbindungen zu erhalten, stammen diese beide aus demselben Verbindungspool. In Tomcat ist jedoch beim Instanziieren von DataSource-Objekten aus Java-Code jede neue DataSource-Instanz ein ganz neuer Verbindungspool. Wenn Sie diese Verbindungspools beispielsweise über JAX-RS-Webdienstaufrufe hinweg beibehalten möchten, müssen Sie Ihren eigenen Datenbankpool-Cache (DataSource) erstellen, die DataSource-Instanzen (eine pro Datenbank) darin ablegen und speichern in einem Objekt, das JAX-RS über Webdienstaufrufe hinweg bestehen bleibt. Ich habe das gerade gemacht und es funktioniert gut.

Übrigens, Tomcat-Datenbankverbindungspooling bietet ähnliche Funktionen wie SqlServer/ADO.NET-Verbindungspooling, Sie müssen nur JNDI-Ressourcen verwenden, um Ihre DataSource-Instanzen zu erstellen. (In meinem Fall ist dies keine Option, da Datenbanken in meiner Anwendung dynamisch erstellt werden und JNDI-Definitionen im Allgemeinen aus Konfigurationsdateien erstellt werden, die Tomcat beim Start liest.)