Widząc w tym przykładzie autonomiczny przykład Java, uzyskuje się połączenie przy użyciu datasource.getConnection()
, co jest fajne. Ale w ostatnim bloku jest napisane: con.close()
.Pula połączeń JDBC Tomcata (połączenie zwalniające)
Pytanie: Kiedy zaimplementuję to, wydaje się oczywiste, że con
otrzymam ze źródła danych zostanie zamknięte za każdym razem w końcu. Kiedy to nastąpi, czy mechanizm łączenia połączeń uzyska nowe połączenie i doda je do puli?
Zakładam, że powinno być wywołanie metody, takie jak releaseConnection()
, które pozwoli puli podjąć samodzielną decyzję, czy ją zamknąć, czy też pozostawić ją otwartą do innego użytku.
Próbowałem również zrobić to ConnectionPool aPool = datasource.createPool();
Ale widzę, że nie ma nic takiego jak połączenie wersji na tym aPool
.
Chyba czegoś tu brakuje? Doceń swoją pomoc.
Fragment kodu z Tomcat JBDC connection pool:
DataSource datasource = new DataSource();
datasource.setPoolProperties(p);
Connection con = null;
try {
con = datasource.getConnection();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select * from user");
int cnt = 1;
while (rs.next()) {
System.out.println((cnt++)+". Host:" +rs.getString("Host")+
" User:"+rs.getString("User")+" Password:"+rs.getString("Password"));
}
rs.close();
st.close();
} finally {
if (con!=null) try {con.close();}catch (Exception ignore) {}
}
Zachowaj ustawienie "MaxIdle" dla źródła danych wystarczająco dużego, aby te połączenia nie były zamykane. Ustawienie na 0 spowoduje wyłączenie wszelkich zamkniętych połączeń, jak sądzę. – Hartmut