Подтвердить что ты не робот

Лучшая конфигурация c3p0

Я борюсь с проблемой конфигурации c3p0. Я отправил вопрос на прошлой неделе

4b9b3361

Ответ 1

Это конфигурация, которую я использую, которая минимизирует ресурсы. Конечно, вы захотите настроить приложение для использования необходимых ему ресурсов...

Ссылка: http://www.mchange.com/projects/c3p0/index.html

  • testConnectionOnCheckin проверяет соединение, когда оно возвращается в пул. testConnectionOnCheckOut, хотя будет обеспечивать активные соединения перед использованием, будет слишком дорогостоящим.
  • idleConnectionTestPeriod устанавливает ограничение на длительность простоя соединения до его тестирования. Без preferredTestQuery значение по умолчанию DatabaseMetaData.getTables() - это агностик базы данных, и хотя относительно дорогостоящий вызов, вероятно, подходит для относительно небольшой базы данных. Если вы параноик о производительности, используйте запрос, специфичный для вашей базы данных (т.е. preferredTestQuery="SELECT 1")
  • maxIdleTimeExcessConnections вернет connectionCount обратно до minPoolSize после всплеска активности.

Ниже настройки конфигурации объединяются между 3-20. Простые соединения проверяются каждые 5 минут, чтобы поддерживать их. Из-за idleConnectionTestPeriod, это будет поддерживать только количество минут в минутах. Если на 4-минутной отметке имеется более 3 соединений, они убивают эти соединения, освобождая ресурсы до минимума.

Использование maxIdleTimeExcessConnections и idleConnectionTestPeriod отменяет необходимость в maxIdleTime

<Context docBase="myapp" path="/myapp" reloadable="true">
    <Resource description="My DB Datasource" name="jdbc/mydb"
        auth="Container" factory="org.apache.naming.factory.BeanFactory"
        type="com.mchange.v2.c3p0.ComboPooledDataSource" 
        user="myuser" password="******"
        minPoolSize="3"
        maxPoolSize="20"
        acquireIncrement="1" 
        driverClass="com.mysql.jdbc.Driver" 
        jdbcUrl="jdbc:mysql://localhost:3306/mydb"
        testConnectionOnCheckin="true" 
        idleConnectionTestPeriod="300"
        maxIdleTimeExcessConnections="240"
    />
</Context>

Ответ 2

Лучшей конфигурацией является настройка JPA для использования среды контейнера для получения DataSource.

Это позволяет контейнеру предоставлять пул соединений, а не настраивать его непосредственно в проект JPA.

Вы не указываете, с какой средой вы работаете. Я почти всегда использую c3p0 с автономными приложениями, такими как настольные или серверные приложения Java SE. Я также использую его с фреймворком Spring.

При использовании контейнера, такого как Servlet (Tomcat/Jetty) или Application Server (например, Glashfish или JBoss AS), они уже предоставляют реализацию пула соединений DataSource, которая обычно не является c3p0, но обеспечивает эквивалентную функцию.

Я никогда не пытался настраивать пул соединений внутри проекта JPA, потому что это означает редактирование конфигурации, чтобы настроить его для каждой среды, в которой он должен работать. Это головная боль, поэтому лучше, чтобы части JPA были предоставлены DataSource для использования во время самозагрузки.