2014-11-25 2 views
0

Я использую c3p0 в качестве пула соединений и ebean в качестве реализации ORM. В настоящее время я ставлю ниже свойств в C3P0 бассейне:тайм-аут запроса в mysql через c3p0

minPoolSize 
maxPoolSize 
maxIdleTime 
preferredTestQuery 

Но я бродил, как установить тайм-аут на запросе, т.е. предположит, если запрос принять более 200 миллисекунд, то просто отказаться, а не ждать, пока на нем бесконечно. Как бы вы это сделали с помощью c3p0. Я знаю, как установить это простым JDBC, то есть Statement.setQueryTimeout(), но как сделать то же самое через c3p0. Или есть другой способ?

maxIdleTime и тайм-аут запроса, о котором я упомянул, делает то же самое, то есть через определенный промежуток времени, если мы не получим ответ, убить соединение? Заранее спасибо.

ответ

1

No, maxIdleTime не имеет никакого отношения к тому, как долго может выполняться запрос. Он определяет, как долго Connections будет разрешено простаивать в пуле до того, как они истекут и будут уничтожены.

c3p0 - простой JDBC. По спецификации JDBC он предлагает прозрачный Пул соединений. Прозрачный означает в этом контексте, что API не меняется, ваш код должен быть в основном одинаковым с пулом или без него. Вы можете позвонить Statement.setQueryTimeout() в сообщениях, полученных из c3p0-управляемого Connection, как и с любым другим заявлением.

В целом, c3p0 не мешает подключению во время их проверки. После того, как клиентское приложение использует соединение, c3p0 наблюдает, но не сильно путается с тем, что делает клиентское приложение. Основным исключением из этого является параметр конфигурации unreturnedConnectionTimeout, который предназначен для помощи в отладке или обходе соединений. [См. here]. В реальном случае вы можете использовать unverturnedConnectionTimeout, чтобы делать то, что хотите, заставить отказаться от более медленных запросов, хотя и довольно грубо. unreturnedConnectionTimeout заставит невозвращенное соединение быть закрытым() после заданного периода времени, и пул обычно должен будет получить замену. Я бы начал с Statement.setQueryTimeout перед тем, как попробовать `unreturnedConnectionTimeout '.

Смежные вопросы