резюме для XID поднято 0: неизвестно - PullRequest
1 голос
/ 09 февраля 2012

Я использую Spring 3.0.5, Hibernate 3.6.7, Atomikos TransactionEssentials 3.7.0 и MySQL 5.5

Недавно я столкнулся с проблемой, состоящей в том, что соединения в моем пуле соединений истекли через 8 часов и были сброшенысервер, вызывающий сообщение "резюме для XID '???'поднял 0: неизвестно

Вот моя конфигурация источника данных:

<bean id="myDataSource"
      class="com.atomikos.jdbc.AtomikosDataSourceBean"
      init-method="init"
      destroy-method="close"
      depends-on="myConfigurer">
    <property name="uniqueResourceName" value="myPUDataSource" />
    <property name="xaDataSourceClassName" value="$CONF{database.XAdriver}" />
    <property name="poolSize" value="10" />
    <property name="xaProperties">
        <props>
            <prop key="user">$CONF{database.user}</prop>
            <prop key="password">$CONF{database.password}</prop>
            <prop key="URL">$CONF{database.url}</prop>
            <prop key="pinGlobalTxToPhysicalConnection">true</prop>
            <prop key="autoReconnect">true</prop>
        </props>
    </property>
</bean>

Во время расследования я обнаружил, что параметр autoReconnect = true только повторно соединяет мое ошибочное соединение после задержки в 2 секунды (который настраивается, я думаю). Просматривая веб-страницы, я нашел решения, предлагающие увеличить wait_timeout на MySQL-сервере, что, я думаю, не является реальным решением. Приложение должно иметь возможность обрабатывать неработающие соединения и автоматически переподключаться, поскольку могут быть другиепроблемы, вызывающие потерю соединения. (И я не хочу давать какие-либо директивы серверам, какого бы рода приложение не использовалось).

Наконец-то я нашел для этого хорошее решение, которое я опубликую в ответчтобы помочь людям, сталкивающимся с такими же или похожими проблемами.

1 Ответ

2 голосов
/ 12 февраля 2012

Вставив строку:

<property name="testQuery" value="SELECT 1"/>

в конфигурации источника данных, кажется, что соединение проверено перед использованием и переподключено, если оно не работает. Я попробовал это с wait_timeout=60 и даже с перезапуском MySQL-Server, когда мое приложение работало ...

Результат: больше никаких исключений и ошибок!

...