繁体   English   中英

默认值 -1 的 spring 事务何时超时?

[英]When do spring transaction timeout for default value of -1?

这是我的豆子

<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上的代码 class

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: Timeout expired 异常是否超时? 有什么建议么?

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

-1是 NONE 的占位符。 org.springframework.transaction package 中的所有类都使用它来表示已设置 NO TIMEOUT,因此 Spring 将使用底层事务系统的默认超时,如果不支持超时则不使用。

您可以在TransactionDefinition class 中阅读此定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM