使用weblogic管理数据库连接池遇到的一个问题

问题描述

昨天上线新版本,遇到一个问题。几年前的一个导入文件,进行银行卡号和银行名是否匹配的校验功能,出现了bug。一直抛出connection closed。由于是老功能,因此大家一致认为代码层面应该是久经考验了的,一直以为是数据库那边有问题。排查了半个小时,也没有找出原因。
后来,一位老同事,说你这个是不是事务运行的时间过长,导致连接被回收掉了。基于这一思路,去看了一下代码,才发现这个事务里面是个跨库操作。伪代码逻辑如下:

boolean isRight = checkData(cardNo, bankNm) ;// 二号库
  if(!isRight){
		isRight = checkData(cardNo, bankNm); //一号库`在这里插入代码片`
	}

因为这里是跨库,于是可以推测两个连接,一号库的连接由于长时间没有使用,而被回收了。在去查看了weblogic的日志和配置后发现果然如此。之前配置,一个连接只有60秒没有活动就会被回收掉。修改后,程序运行正常。

反思

  1. 这地方的代码的问题:这是在一个循环里面,每一条去查询数据库进行验证。
  2. 在一个事务里边包含了跨库操作。这些都带来了风险。
  3. 之前运行很长时间,都没有造成事故,只是因为运气好。因为想要达成这样的条件,首先得循环次数够多,其次得长时间不需要查询一号库。
  4. 以后在写代码时候,要考虑到资源的管理,尽可能地将跨库操作进行拆解。像这里这个场景,完全可用先将所有数据在二号库验证完成后,再去一号库进行验证。这样就不需要在一个事务里面了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值