作者:铁打的岳小野 | 来源:互联网 | 2024-10-17 18:38
1。加入我设置了最大连接数量maxActive30,假如已经连接30个了,如果有新请求需要连接数据库,执行到Connectionconnthis.getDataSource(dat
1。加入我设置了最大连接数量maxActive="30",假如已经连接30个了,如果有新请求需要连接数据库,执行到Connection conn =this.getDataSource(dataSourceName);时候,会发生什么,直接报错?或者等待数据池中产生可用的连接?
2。我这个问题主要是为了并发考虑的 ,我本来写的处理用户请求类,在连接数据库池后都会thread.sleep(100)下,可以先处理其他请求不需要连接数据库的请求。突然想到如果连接数量满了,会不会造成死锁?我改成在连接数据库前sleep是不是就没问题了?
我的Dispatch类是并发的,并发执行warpSocket()方法处理用户请求
10 个解决方案
也就是说如果负荷已满,Dispatch处理类直接就进入请求队列,等获得连接资源再进入就绪状态等待cpu,对吧?也就是说不用我写并发了,池里没有空闲连接直接就 等待了。
不是都有maxWait 最大等待时间吗
超过这个时间就会返回Connection pool exhausted
拿不到链接了
如果你没设maxwait
他会先看看有没有可用连接,如果没有。。。崩掉把。。。
Stack of trace 大概哦,我乱猜的
如果连接数已经达到上限,就会加入等待队列,而如果同样达到了等待队列的上限,请求失败。
新请求的线程会堵塞,等待池中资源的释放,好比你在食堂打饭一样
也就是说会堵塞或者释放。windows某个端口等待队列最多50个吧?再加50个最大数据库池连接,最多处理100个...