active Record 执行查询提示连接已经关闭

在连接池资源非常有限的情况,比如说只有2个连接,activerecord会有如下问题:

image.png

image.png

跟踪代码后发现:在activerecord初始化的时候,初始化完成后会立即释放一个连接。在调用db.find 执行完后的finaly里面也会释放连接。这是导致第二个查询不能正常执行的原因。

除了连接池增加连接外,有其他解决办法吗?

评论区

JFinal

2020-08-16 18:06

问题原因应该没找到,因为连接不够时,后面的获取操会等待连接释放,并不会抛出 Connection is closed 的异常

你再单步调试一下,重新定位原因

杜福忠

2020-08-17 09:40

new DruidPlugin(...).set(1,1,2);设置了吗? 试试把这个加上有效果没

lxhxka

2020-08-17 09:58

你应该把原代码贴上来。如果只有这两行代码,那只能说明连接池有问题。

lxhxka

2020-08-17 10:04

如果你没有用事务的话,执行完SQL是会调用conn.close方法,但是conn是否被真的关闭,取决于数据库连接池的实现,可能关闭连接,也可能放回池内。但是就算真的关闭了,也并不会影响下一次执行SQL,因为DbPro会重新重连接池获取conn。

lxhxka

2020-08-17 10:05

上面打错字了,》》DbPro会重新从连接池获取conn。

丹姐

2020-10-13 16:17

谢谢各位,是连接池的问题

JFinal

2020-10-13 17:27

@丹姐 事隔两个月能回来回复,赞

热门反馈

扫码入社