spring 事务超时时间不起作用

本文探讨了在Spring事务管理中设置事务超时时间的作用及限制,并通过具体示例说明了HTTP请求如何影响事务的正常超时行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

在一个事务方法中,发送http请求,由于http请求没有设置sockettimeout导致,请求阻塞,虽然事务方法设置了超时时间1秒,但是一直不超时,程序假死。

//伪代码
public void save(){
    //插入数据库一条记录
    insert into user(name,age) values('hello',20);
   //发送http请求,通知appA
   http.get('url');
}
<!--springContext.xml-->

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
            <tx:method name="save*" timeout="1"/>
    </tx:attributes>
</tx:advice>

分析

原来是对事务超时时间理解不充分导致。
transaction timeout,设置超时时间,每执行一次sql就check一次时间。注意,这里是每执行一次sql就check一次时间,代码中,执行插入sql时,check时间没超时,等再执行http请求时,这个不是sql,所以不会check过期时间,加上请求假死,所以,程序就hold在那,事务也不超时回滚。

参考

http://www.importnew.com/2466.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值