这是我的豆子
<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发生异常时是否超时:是否抛出超时过期异常?**有何建议?
2条答案
按热度按时间idfiyjo81#
当服务器超时时,MySql本身也有自己的超时。在调试模式下测试几个不同的长时间运行的查询,如果你看到相同的时间用于异常,那么这是从服务器超时。
h9a6wy2h2#
-1
是NONE的占位符,org.springframework.transaction包中的所有类都用它来表示NO TIMEOUT已经被设置,因此Spring将使用底层事务系统的默认超时,如果不支持超时,则使用none。您可以在TransactionDefinition类中读取此定义。