什么时候弹簧事务超时为默认值-1?

时间:2014-10-20 04:20:13

标签: java mysql spring spring-transactions

这是我的豆子

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
          <property name="defaultTimeout" value="400" />            
    </bean>

Spring JpaTransactionManager默认超时为-1。在我的情况下,我已经用400秒覆盖了defaultTimeout。所以,如果我覆盖了它,那么它会在指定的defaultTimeout时间后超时。

查看 DataSourceTransactionManager

上的代码
int timeout = determineTimeout(definition);
            if (timeout != -1) {
                txObject.getConnectionHolder().setTimeoutInSeconds(timeout);
            }


public void setTimeoutInSeconds(int seconds) {
        setTimeoutInMillis(seconds * 1000);
        public void setTimeoutInMillis(long millis) {
        this.deadline = new Date(System.currentTimeMillis() + millis);
    }
}

因此,如果超时值不等于-1,那么我指定的超时数是1000的倍数,用于超时。但是,如果我没有覆盖超时值,那么它将为-1。

因此,默认值为-1时会发生超时。

是否超时MySql.Data.MySqlClient.MySqlException:抛出超时过期异常? 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

当服务器超时时,MySql本身也有自己的超时。在调试模式下对几个不同的长时间运行查询进行基准测试,如果您看到异常所用的时间与服务器超时相同。