Dette er ikke den rigtige måde. Datakilden skal administreres af den container, du kører programmet i. MysqlConnectionPoolDataSource
er ikke en tilslutningspool. Det er blot en konkret implementering af javax.sql.DataSource
interface. Du definerer det normalt i JNDI-konteksten og henter det derfra. Også MySQL selv angiver det hele eksplicit i deres dokumentation
.
Nu, hvordan man bruger det afhænger af formålet med applikationen. Hvis det er en webapplikation, skal du henvise til JNDI-ressourcedokumentationen for den pågældende servletcontainer/appserver. Hvis det for eksempel er Tomcat, så kan du finde det her . Hvis du kører en klientapplikation --hvilket jeg meget vil stille spørgsmålstegn ved værdien af en forbindelsespulje--, så skal du lede efter en forbindelsespoolingramme, som kan gøre brug af den MySQL-leverede forbindelsespoolede datakilde, som f.eks. C3P0 .
Det andet problem med koden, som du sendte, er, at PooledConnection#getConnection()
returnerer det underliggende forbindelse som altså ikke er en samlet forbindelse. Hvis du ringer tæt på den, returnerer du ikke forbindelsen til poolen, men lukker den bare rigtigt. Poolen skal skabe en ny forbindelse hver gang.
Så trådsikkerhedshistorien, der afhænger af den virkelige den pågældende forbindelsespoolingramme. C3P0 har bevist sin robusthed i årevis, du bekymrer dig ikke om det, så længe du skriver JDBC-kode i henhold til standardformsproget, dvs. bruger kun JDBC-grænseflader og erhverve og luk alle ressourcer (Forbindelse
, Erklæring
og Resultatsæt
) i kortest mulig omfang.