Ответ 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>