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

Chiusura delle connessioni JDBC nel pool

Quando si utilizza Connection Pool, è necessario chiudere la connessione alla fine? In caso affermativo, lo scopo del pooling non è perso? E in caso negativo, come fa DataSource a sapere quando una particolare istanza di Connection viene liberata e può essere riutilizzata? Sono un po' confuso su questo, qualsiasi indicazione è stata apprezzata.

Sì, sicuramente è necessario chiudere anche la connessione in pool. In realtà è un wrapper attorno alla connessione effettiva. Sotto le coperte rilascerà la connessione effettiva al pool. Spetta ulteriormente al pool decidere se la connessione effettiva sarà effettivamente essere chiuso o riutilizzato per un nuovo getConnection() chiamata. Quindi, indipendentemente dal fatto che tu stia utilizzando un pool di connessioni o meno, dovresti sempre chiudi tutte le risorse JDBC in ordine inverso nel finally blocco del try bloccare dove li hai acquisiti. In Java 7 questo può essere ulteriormente semplificato utilizzando try-with-resources dichiarazione.

Il seguente metodo è qualcosa di simile allo standard? Sembra un tentativo di ottenere una connessione dal pool e, se non è possibile stabilire DataSource, utilizzare il vecchio DriverManager. Non siamo nemmeno sicuri di quale parte venga eseguita in fase di esecuzione. Ripetendo la domanda precedente, si dovrebbe chiudere la connessione che esce da tale metodo?

L'esempio è piuttosto spaventoso. Devi solo cercare/inizializzare il DataSource solo una volta durante l'avvio dell'applicazione in un costruttore/inizializzazione di una classe di configurazione DB a livello di applicazione. Quindi chiama semplicemente getConnection() sulla stessa origine dati per il resto della vita dell'applicazione. Non c'è bisogno di sincronizzazione né controlli nulli.

Vedi anche: