Ve vlastnostech konfigurace jste použili vlastnost c3p0 maxIdleTime, ale vlastnosti c3p0 se konfigurují pomocí c3p0.
prefix nebo hibernate.c3p0.
. Všimněte si, že povolení libovolného z c3p0
vlastnosti automaticky povolí příslušného poskytovatele připojení pomocí heuristiky hibernace. V protokolu není vidět, že používáte c3p0. Pokud nemáte nakonfigurovány zdroje dat, Hibernate použije hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider
. Tento poskytovatel připojení má vestavěný základní fond připojení, pro který můžete nastavit hibernate.connection.pool_size
, ale používá se pouze pro účely vývoje. Nikdy jej nepoužívejte v produkčním prostředí.
Možná budete mít nekonečnou diskusi na téma Jak opravit java.net.SocketException:Broken pipe . Po nějaké době si uvědomíte, že jste zůstali otevření přípojky v bazénu, které jsou náhle uzavřeny na druhé straně z následujících důvodů:
- Firewally nebo routery mohou přerušit nečinná připojení (protokol MySQL klient/server nezaznamenává).
- Server MySQL může uzavírat nečinná připojení, která překračují
wait_timeout
nebointeractive_timeout
práh.
K řešení těchto problémů lze použít následující tipy:
- Je použita nejnovější verze (5.1.13+) ovladače JDBC.
- Zajistěte, aby
wait_timeout
ainteractive_timeout
jsou nastaveny dostatečně vysoko. Zkontrolujte, zdainteractiveClient
se používá. - Ujistěte se, že
tcpKeepalive
je povoleno. - Zajistěte, aby všechna konfigurovatelná nastavení časového limitu brány firewall nebo směrovače umožňovala maximální očekávanou dobu nečinnosti připojení.
- Zajistěte, aby byla připojení platná, když jsou použita z fondu připojení. Použijte dotaz, který začíná
/* ping */
k provedení lehkého pingu namísto úplného dotazu. Všimněte si, že syntaxe příkazu ping musí být přesně taková, jak je zde uvedeno. - Pokud bylo připojení ponecháno delší dobu nečinné, před jeho použitím připojení výslovně ověřte.
- Minimalizujte dobu, po kterou je objekt připojení ponechán nečinný, zatímco se provádí jiná aplikační logika.
Abyste vyhověli některým z těchto možností, raději použijte fond připojení, který můžete použít s režimem spánku. Hibernate má podporu pro commons-dbcp, c3p0 a proxool. Také můžete nakonfigurovat zdroj dat JNDI na webovém serveru pro použití s režimem spánku, má fond připojení. Viz Kapitola 7 Sdružování připojení pomocí konektoru/J .
Pokud chcete konfigurovat Hibernate pomocí c3p0, měli byste si přečíst tento Jak nakonfigurovat fond připojení C3P0 . Pro příklad konfigurace dbcp byste měli zkontrolovat tento příspěvek MySQL, Hibernate a Broken Pipe Exception . Jaké sdružování připojení použijete, je jen na vás.