简历为XID提升0:未知

时间:2012-02-09 09:15:54

标签: mysql hibernate jdbc xa atomikos

我使用的是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秒后重新连接我的故障连接(我认为这是配置)。 浏览网页我发现解决方案建议增加MySQL-Server中的wait_timeout,我认为这不是一个真正的解决方案。 应用程序应该能够处理死连接并自动重新连接,因为可能还有其他问题导致连接丢失。 (并且我不想对服务器做出任何应用程序使用的任何指令。)

最后我找到了一个很好的解决方案,我将作为答案发布,以帮助遇到相同或类似问题的人。

1 个答案:

答案 0 :(得分:2)

插入以下行:

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

在数据源的配置上,似乎连接在使用前已经过测试,如果已经死了则重新连接。 我尝试使用wait_timeout=60,甚至在应用程序运行时重启了MySQL-Server ......

结果:不再有例外和错误!