Detta är inte rätt sätt. Datakällan måste hanteras av vilken behållare du än kör programmet i. MysqlConnectionPoolDataSource
är inte en anslutningspool. Det är bara en konkret implementering av javax.sql.DataSource
gränssnitt. Du definierar det normalt i JNDI-sammanhang och hämtar det därifrån. Även MySQL själv anger allt explicit i deras dokumentation
.
Nu, hur man använder det beror på syftet med applikationen. Om det är en webbapplikation måste du hänvisa till JNDI-resursdokumentationen för den aktuella servletcontainern/appservern. Om det till exempel är Tomcat, så kan du hitta det här . Om du kör ett klientprogram -- för vilket jag skulle ifrågasätta värdet av en anslutningspool -- måste du leta efter ett ramverk för anslutningspoolning som kan använda den MySQL-försedda anslutningspoolade datakällan, som t.ex. C3P0 .
Det andra problemet med koden du postade är att PooledConnection#getConnection()
returnerar underliggande anslutning som alltså inte är en poolad anslutning. Att ringa nära kommer inte att returnera anslutningen till poolen, utan bara stänga den. Poolen måste skapa en ny anslutning varje gång.
Sedan trådsäkerhetsberättelsen, som beror på den verkliga anslutningspoolning i fråga. C3P0 har bevisat sin robusthet i flera år, du oroar dig inte för det så länge du skriver JDBC-kod enligt standardspråket, d.v.s. använder endast JDBC-gränssnitten och förvärva och stäng alla resurser (Anslutning
, Utdrag
och Resultatuppsättning
) i kortast möjliga omfattning.