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

Come posso impedire che Hibernate + c3p0 + MySql crei un gran numero di connessioni dormienti?

Quando si utilizza un pool di connessioni, si chiama Connection#close() non chiude fisicamente la connessione ma la restituisce al pool per un riutilizzo futuro. In altre parole, la connessione rimane aperta e questo è il punto centrale dell'utilizzo di un pool.

Bene, questo è il problema. Stai creando una SessionFactory più e più volte (ciascuno creando il proprio pool) mentre dovresti crearlo solo una volta per tutta la durata della tua applicazione. Se non stai usando alcun framework particolare, questo è in genere fatto in qualche classe di utilità (il famoso HibernateUtil classe).

Il Tutorial di ibernazione ufficiale ha un esempio molto semplice di una tale classe. Oppure vedi questo che è un po' più ricco.