Aby najlepiej wdrożyć C3P0, sprawdź tę odpowiedź
C3P0 :
W przypadku aplikacji korporacyjnych najlepszym rozwiązaniem jest C3P0. C3P0 to łatwa w użyciu biblioteka do rozszerzania tradycyjnych sterowników JDBC (opartych na DriverManager) o źródła danych, które można powiązać z JNDI, w tym źródła danych, które implementują łączenie połączeń i instrukcji, zgodnie z opisem specyfikacji jdbc3 i rozszerzenia std jdbc2. C3P0 również solidnie obsługuje rozłączanie DB i przezroczyste ponowne łączenie po wznowieniu, podczas gdy DBCP nigdy nie odzyskuje połączeń, jeśli łącze zostanie zdjęte spod niego.
Dlatego właśnie c3p0 i inne pule połączeń również mają przygotowane pamięci podręczne instrukcji - pozwala to kodowi aplikacji uniknąć zajmowania się tym wszystkim. Instrukcje są zwykle przechowywane w pewnej ograniczonej puli LRU, więc często używane instrukcje ponownie wykorzystują instancję PreparedStatement.
Co gorsza, DBCP zwracał obiekty Connection do aplikacji, w której uszkodzony został transport bazowy. Typowym przypadkiem użycia dla c3p0 jest zastąpienie standardowej puli połączeń DBCP dołączonej do Apache Tomcat. Często programista napotyka sytuację, w której połączenia nie są poprawnie przetwarzane w puli połączeń DBCP, a c3p0 jest w tym przypadku cennym zamiennikiem.
W aktualnych aktualizacjach C3P0 ma kilka genialnych funkcji. podano poniżej:
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setMinPoolSize();
dataSource.setMaxPoolSize();
dataSource.setMaxIdleTime();
dataSource.setMaxStatements();
dataSource.setMaxStatementsPerConnection();
dataSource.setMaxIdleTimeExcessConnections();
Tutaj maksymalny i minimalny rozmiar puli definiują granice połączenia, co oznacza, jak minimalne i maksymalne połączenie będzie przyjmować ta aplikacja. MaxIdleTime()
określić, kiedy zwolni bezczynne połączenie.
DBCP :
To podejście jest również dobre, ale ma pewne wady, takie jak przekroczenie limitu czasu połączenia i ponowne wydanie połączenia. C3P0 jest dobry, gdy korzystamy z projektów wielowątkowości. W naszych projektach korzystaliśmy jednocześnie z wielu wykonań wątków za pomocą DBCP, a następnie przekroczyliśmy limit czasu połączenia, jeśli korzystaliśmy z większej liczby wątków. Więc poszliśmy z konfiguracją c3p0. W ogóle nie poleciłbym DBCP, szczególnie jego umiejętność wyrzucania połączeń z puli, gdy DB zniknie, jej niezdolność do ponownego połączenia, gdy DB wróci, i brak możliwości dynamicznego dodawania obiektów połączeń z powrotem do puli (wisi na zawsze na czytnik po wejściu JDBCconnect I / O)
Dzięki :)