java 何时触发事务超时默认值-1?

f5emj3cl  于 2023-01-24  发布在  Java
关注(0)|答案(2)|浏览(140)

这是我的豆子

<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时间后超时。
查看数据源事务管理器类上的代码

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发生异常时是否超时:是否抛出超时过期异常?**有何建议?

idfiyjo8

idfiyjo81#

当服务器超时时,MySql本身也有自己的超时。在调试模式下测试几个不同的长时间运行的查询,如果你看到相同的时间用于异常,那么这是从服务器超时。

h9a6wy2h

h9a6wy2h2#

-1是NONE的占位符,org.springframework.transaction包中的所有类都用它来表示NO TIMEOUT已经被设置,因此Spring将使用底层事务系统的默认超时,如果不支持超时,则使用none。
您可以在TransactionDefinition类中读取此定义。

相关问题