我正在使用Apache Commons Pool 2实现为我的应用程序提供对象池机制。
到目前为止,我已经在代码中将maxTotal()
和maxIdle()
的默认值设置为10
。
但是我不明白它们之间有什么区别?如果我将maxIdle()
设置为非常小的值(假设为0)或非常大的值(等于maxTotal()
)怎么办?
注意:Apache类在内部建议将上述两个配置的默认值都设置为8。
最佳答案
连接池是一种用于与数量不受限制的同时用户共享有限数量的数据库连接的技术。最大总连接数(maxTotal
)包括 Activity 和空闲连接,即正在使用的连接和当前未使用的连接(这是所有连接的总和)。最大空闲连接数(maxIdle
)是准备使用的连接(但当前未使用)。如果将maxTotal
设置为100,则一次最多可向数据库打开100个连接;如果maxIdle
设置为10,则如果没有一个连接被使用,则最多可以释放90个连接。池将根据需要重新连接。
在池中,空闲连接已准备就绪,如果连接当前处于空闲状态(池返回空闲连接),则对连接的请求将不会阻塞。如果没有空闲的连接,则池将阻止打开连接,或者直到连接返回到池中为止。
在您的问题中,如果同时最多使用10个,则将打开十个连接,并且该池将不会缩小或增长。
关于java - Apache Commons Pool 2中的maxTotal和maxIdle有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28364855/