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