问题:
1、我们应该打开多少个连接?
2、每个连接多久有效?
3、如果连接出问题了,怎么办?
4、如果从当前连接池中获取更多的连接,怎么办?
5、如果忘记将连接返回到连接池,怎么办?
1、基本参数:
- min size (任何时候,至少有 minSize个连接被打开)
- initial size (当应用启动的时候,连接池中打开多少个连接。)
- max size (连接池中最大的连接数)
默认值:
| c3p0 | HikariCP | druid |
min size | 3 | 10 | 0(minIdle) |
initial size | 3 | 10 | 0(initialSize) |
max size | 15 | 10 | 8(maxActive) |
2、从连接池中获取一个连接需要多久?
默认值:
c3p0: checkoutTimeout
HikariCP: connectionTimeout
druid: maxWait
| c3p0 | HikariCP | druid | 推荐 |
maxWait |
| 30s | -1 | 1ms |
为什么推荐1ms?
一般情况下,从连接池获取一个连接少于1秒。但是如果达到了maxActive后,需要等待30秒,后边的请求堆积的越来越多,很可能内存溢出,并发性不高。
未完。。。。
来自:https://www.javacodegeeks.com/2018/12/wtf-connection-pools.html?utm_source=Notification&utm_medium=Web-Push&utm_campaign=Notifications-Java-Code-Geeks