阿里巴巴面试的时候问到的一个问题,不太清楚,网上好像也没搜到比较详细的答案。
java连接池中一般都有设置最大、最小连接数,当连接池中的连接达到最大连接数时,就不会再创建新的连接啦,但程序是怎么收缩连接池,到最小空闲连接数的呢?
个人猜测:web容器会定时检测连接池中空闲连接,当超过一定时间没有使用的话,先判断现有连接池中的连接是否大于最小连接数,如果大于的话,就好回收这个空闲连接,否则的话,就不会进行回收。
不知道是否正确?
阿里巴巴面试的时候问到的一个问题,不太清楚,网上好像也没搜到比较详细的答案。
java连接池中一般都有设置最大、最小连接数,当连接池中的连接达到最大连接数时,就不会再创建新的连接啦,但程序是怎么收缩连接池,到最小空闲连接数的呢?
个人猜测:web容器会定时检测连接池中空闲连接,当超过一定时间没有使用的话,先判断现有连接池中的连接是否大于最小连接数,如果大于的话,就好回收这个空闲连接,否则的话,就不会进行回收。
不知道是否正确?
[quote]
根据 connectionTimeout="20000" 这个时间,如果这个时间段一直没连接就关闭了
[/quote]
这个timeout的时间是对于获取数据库连接超时的时间,比如当数据库的连接达到最大值的时候,再来请求connection时就要等待,这个时候会有一个等待超时时间,您所说的是这个超时时间。
楼主所讲的连接池收缩的问题,其实对于不同的连接池产品的话,应该处理的策略是会有所不同的,但是大体上应该跟楼主讲得差不多,可能是按创建时间对连接池中的连接排序,对于空闲连接的状态,可开辟专门的线程定时检测,以释放connection.
还有一个问题,如下:
如何确保连接池中的最小连接数呢?有动态和静态两种策略。动态即每隔一定时间就对连接池进行检测,如果发现连接数量小于最小连接数,则补充相应数量的新连接,以保证连接池的正常运转。静态是发现空闲连接不够时再去检查。