求助大佬解惑:MyBatis 空闲池与活动池的问题
本帖最后由 XT0624 于 2020-4-29 19:56 编辑https://www.cnblogs.com/mkl7/p/10745912.html
如果空闲池还有连接 的话直接拿一个出来用, 如果空闲池没有可用的连接 ,会查看活动池中的连接是否已经达到最大数量 如果活动池中的连接没有达到最大数量, 会创建一个新的连接https://img2018.cnblogs.com/blog/938075/201904/938075-20190421165849455-2003222999.png 如果活动池中的连接已经达到最大数量, 会判断活动池中哪个是最先进来的(Oldest), 然后对该链接进行处理并返回
问题是:如果空闲池容量为10 并且他们都被使用了 那么他们不是都被放到活动池里了么?这个时候活动池应该也满了。为什么还有空闲池里面没有可用连接,活动池还没有到达最大数量这个概念?
没用过你说的这个东西
不过以连接池概念来看的话
从池里取连接时,空闲池抛出一个连接,让该连接进入活动池
之前设计的一个连接池时这样子
建立了一个连接池,初始化N个连接放入连接池。当有外部进行连接获取时,连接池扔出一个连接(准确的说是空闲池扔出一个连接,连接池对象里面有两个list,一个空闲池,一个活动池,一个连接只能待在一个池里面)
取连接的时候,会先判断空闲池是否还存在可用连接,如果不存在,判断当前已经创建的连接是否已经到达 设置的最大连接数,如果没有,新建一个连接,并抛出,否则扔出一个繁忙报错(我之前是人的繁忙,连接的强制回收没做,看你用的这个东西,应该是有自己的强制回收的) 井右寺 发表于 2020-4-30 08:39
没用过你说的这个东西
不过以连接池概念来看的话
从池里取连接时,空闲池抛出一个连接,让该连接进入活动 ...
我的困惑是:空闲池和活动池是一样大的吗?
如果规定必须一样大,那么查到空闲池没有了可用连接,那么活动池也一定满了,再去查一下,也没有意义。感觉好像做了一步无用功。
如果是不一样大的,那么查到空闲池没有了可用连接,再去先查一下活动池是不是也满了,这个操作我还可以理解。 XT0624 发表于 2020-5-2 10:57
我的困惑是:空闲池和活动池是一样大的吗?
如果规定必须一样大,那么查到空闲池没有了可用连接,那么活 ...
应该是不一样大的
之前我的逻辑是 允许最大连接数超出 空闲池大小
当空闲池进行连接回收的时候,根据一定的规则,决定是否将正在回收的这个连接销毁还是重新入池
即允许连接数有一定上浮,上浮完的连接使用完成后 可能会直接销毁也有可能继续入池并再次被取用 XT0624 发表于 2020-5-2 10:57
我的困惑是:空闲池和活动池是一样大的吗?
如果规定必须一样大,那么查到空闲池没有了可用连接,那么活 ...
另外,我不太理解为什么需要去查一次
整个连接池对象 是可以维护一个全局状态的,直接查询状态就好啦,没必要去单独遍历 空闲池或者活动池的
页:
[1]