Mysql
 sql >> Database >  >> RDS >> Mysql

Sto usando Java PooledConnections correttamente?

Questo non è il modo giusto. L'origine dati deve essere gestita da qualsiasi contenitore in cui stai eseguendo l'applicazione. Il MysqlConnectionPoolDataSource è non un pool di connessioni. È solo un'implementazione concreta di javax.sql.DataSource interfaccia. Normalmente lo definisci nel contesto JNDI e lo ottieni da lì. Anche MySQL stesso lo afferma esplicitamente in la loro documentazione .

Ora, come usarlo dipende dallo scopo dell'applicazione. Se si tratta di un'applicazione Web, è necessario fare riferimento alla documentazione delle risorse JNDI del servletcontainer/appserver in questione. Se è per esempio Tomcat, puoi trovarlo qui . Se stai eseguendo un'applicazione client, per la quale metterei in dubbio il valore di un pool di connessioni, devi cercare un framework di pool di connessioni che possa utilizzare l'origine dati in pool di connessioni fornita da MySQL, come C3P0 .

L'altro problema con il codice che hai pubblicato è che PooledConnection#getConnection() restituirà il sottostante connessione che quindi non una connessione in pool. Chiamando close su di esso non restituirà la connessione al pool, ma lo chiuderà davvero. Il pool deve creare una nuova connessione ogni volta.

Poi la storia della sicurezza dei thread, che dipende dal reale quadro di pooling delle connessioni in questione. C3P0 ha dimostrato la sua robustezza da anni, non te ne preoccupi finché scrivi codice JDBC secondo l'idioma standard, ovvero usa solo le interfacce JDBC e acquisire e chiudi tutte le risorse (Connection , Statement e ResultSet ) nel più breve tempo possibile.