hibernate c3p0 разрывает соединение после тайм-аута mysql - PullRequest
1 голос
/ 24 февраля 2011

У меня странная проблема. я использую hibernate jpa с пружиной на tomcat и в то же время мне нужно переподключить базу данных, когда mysql истекает

c3p0 в jpa:

        <property name="hibernate.c3p0.acquireIncrement" value="100" />
        <property name="hibernate.c3p0.timeout" value="10" />
        <property name="hibernate.c3p0.idle_test_period" value="10" />
        <property name="hibernate.c3p0.max_size" value="1240"/>
        <property name="hibernate.c3p0.min_size" value="50"/>
        <property name="hibernate.c3p0.preferredTestQuery" value="select 1;"/>

это поможет? ::

        <property name="connection.autoReconnect" value="true"/>
        <property name="connection.autoReconnectForPools" value="true"/>
        <property name="connection.is-connection-validation-required" value="true"/>

некоторые люди предлагают? AutoReconnect = true в конце URL, мне это не нравится, и у меня это тоже не сработало.

кто-нибудь с помощью jpa решил эту проблему?

PS: я также пытался использовать <property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider"/>, и он не работал.

кто-то, пожалуйста, помогите, заранее спасибо.

1 Ответ

2 голосов
/ 25 февраля 2011

Пересоединения в c3p0 регулируются следующими свойствами:

hibernate.c3p0.acquireRetryAttempts=...
hibernate.c3p0.acquireRetryDelay=...
hibernate.c3p0.breakAfterAcquireFailure=...

Посмотрите эту главу в руководстве по c3p0 для получения более подробной информации.

РЕДАКТИРОВАТЬ: обновление с подробностями в соответствии с комментарием автора вопроса.

Я использую эти настройки в реальном приложении, в котором настроены две базы данных (одна локальная / только для чтения и другая удаленная / только для записи). Эти настройки c3p0 используются для БД только для записи, поэтому, если соединение потеряно, c3p0 попытается восстановить соединение так, как я хочу. В противном случае настройки по умолчанию (если я правильно помню) установлены, так что переподключение выполняется довольно часто, и это потребляет много ресурсов процессора и заметно влияет на внешний интерфейс. К сожалению, мне больше нечего здесь вставить, так как эти настройки не используются в контексте Tomcat; У меня просто они в старом стиле .properties файл.

Я не получил часть вашего комментария о "фактической процедуре". Переподключение настраивается в настройках пула базы данных. Если вы потеряете соединение во время оперативной транзакции, вы получите исключение (скорее всего, подкласс SQLException или IOException), и если вы знаете, что это вероятно, вам нужно обработать это самостоятельно, так как ни один пул БД не будет знать, что вы хочу сделать с этим (повторить? отменить? отложить?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...