当前位置 博文首页 > 沉默王二:Transactional超时时间控制

    沉默王二:Transactional超时时间控制

    作者:[db:作者] 时间:2021-07-05 16:28

    项目使用的是spring+mybatis+mysql,今天,我需要把处理一个业务就是,当用户出金失败时,事务能够回滚,同时减少用户的等待时间,因为我发现当处理失败时,用户需要等上1分钟以上的时间,这是不合理的。那么经过一系列的调查发现:spring的事务超时(使用Java注解方式)和mysql InnoDB事务超时是相互关联的


    在一个需要进行事务回滚的方法上加入@Transactional的事务注解,timeout超时时间设置为2秒,也就是说发生事务回滚后,2秒钟后对用户响应。

    	@Transactional(timeout=2)
    	public int updateForzenMoney(MoneyTransfer moneyTransfer, int uid) {
    		// 如果是出金请求,则预扣除冻结资金
    		if (moneyTransfer.getType().intValue() == 1) {
    			moneyTransferService.updateTotalmoneyForPerTransfermoney(uid, moneyTransfer.getAmount());
    			// 将请求插入money_transfer表中
    			moneyTransferService.addMoneyTransfer(moneyTransfer);
    			return 1;
    		} else {
    			moneyTransferService.addMoneyTransfer(moneyTransfer);
    			return 2;
    		}
    	}

    cs