Как настроить порог тайм-аута запроса для c3p0 / hibernate - PullRequest
1 голос
/ 02 октября 2009

У меня есть приложение, которое использует Hibernate 3, c3p0 и spring 2.5.6. У нас есть источник данных, настроенный для связи с базой данных postgres. Все работало отлично, пока между сервером приложений и базой данных не был установлен межсетевой экран. Мы периодически получаем java.net.SocketTimeoutException: ошибки чтения тайм-аута при попытке связаться с базой данных

Мы считаем, что издержки брандмауэра вызывают задержку ответа от базы данных. Мы хотим убедиться в этом, увеличив порог времени ожидания запроса до истечения времени ожидания (если это вообще возможно). Вот фрагмент трассировки стека

org.postgresql.util.PSQLException: An I/O error occured while sending to the backend.
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:218)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:451)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:350)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
    at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1808)
    at org.hibernate.loader.Loader.doQuery(Loader.java:697)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
    at org.hibernate.loader.Loader.loadEntity(Loader.java:1881)
    ... 35 more
Caused by: java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at org.postgresql.core.VisibleBufferedInputStream.readMore(VisibleBufferedInputStream.java:135)
    at org.postgresql.core.VisibleBufferedInputStream.ensureBytes(VisibleBufferedInputStream.java:104)
    at org.postgresql.core.VisibleBufferedInputStream.read(VisibleBufferedInputStream.java:73)
    at org.postgresql.core.PGStream.ReceiveChar(PGStream.java:259)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1166)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:192)
    ... 44 more

1 Ответ

0 голосов
/ 02 октября 2009

Это не имеет ничего общего с Hibernate или C3P0; вы получаете тайм-аут от драйвера JDBC.

Если вы используете версию 8.4 или выше, попробуйте установить socketTimeout на более высокое значение (или даже ноль для его отключения) в строке подключения.

...