Щоб найкраще реалізувати C3P0, перевірте цю відповідь
C3P0 :
Для корпоративного застосування найкращим підходом є C3P0. C3P0 - це проста у користуванні бібліотека для розширення традиційних (заснованих на DriverManager) драйверів JDBC за допомогою джерел даних, пов'язаних з JNDI, включаючи джерела даних, які реалізують об'єднання і об'єднання даних, як описано у специфікаціях jdbc3 та jdbc2 std. C3P0 також надійно обробляв роз'єднання БД і прозоро відновлюється під час відновлення, тоді як DBCP ніколи не відновлював з'єднання, якщо посилання було виведене з-під нього.
Тож саме тому c3p0 та інші пули підключень також мають підготовлені кеші операторів - це дозволяє коду програми уникати роботи з усім цим. Висловлювання зазвичай зберігаються в деякому обмеженому пулі LRU, тому загальні заяви повторно використовують екземпляр PreparedStatement.
Що ще гірше, DBCP повертав об'єкти Connection до програми, для якої порушений базовий транспорт. Загальний випадок використання c3p0 полягає в заміні стандартного пулу з'єднань DBCP, включеного в Apache Tomcat. Часто програміст стикається з ситуацією, коли з'єднання неправильно не переробляються в пулі з'єднань DBCP і c3p0 є цінною заміною в цьому випадку.
У поточних оновленнях C3P0 має деякі блискучі функції. такі дані наведені нижче:
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setMinPoolSize();
dataSource.setMaxPoolSize();
dataSource.setMaxIdleTime();
dataSource.setMaxStatements();
dataSource.setMaxStatementsPerConnection();
dataSource.setMaxIdleTimeExcessConnections();
Тут максимум та мінімальний розмір пулу визначають межі з'єднання, що означає, наскільки мінімальне та максимальне з'єднання прийме ця програма.MaxIdleTime()
визначте, коли воно випустить непрацююче з'єднання.
DBCP :
Такий підхід також хороший, але має деякі недоліки, такі як час очікування підключення та перезапуск з'єднання. C3P0 хороший тоді, коли ми використовуємо багатозахисні проекти. У наших проектах ми використовували одночасно декілька виконання потоків за допомогою DBCP, тоді ми отримали тайм-аут з'єднання, якщо використовували більше виконання потоків. Тому ми пішли з конфігурацією c3p0. Я б зовсім не рекомендував DBCP, особливо це сприйняття викидання з'єднань з пулу, коли БД відходить, його неможливість повторного підключення, коли БД повертається, і її нездатність динамічно додавати об’єкти з'єднання назад у пул (він вічно зависає на повідомлення прочитання гнізда JDBCconnect вводу / виводу)
Дякую :)