1

我遇到了这个面试问题:你将如何管理数据库连接池?我的想法是:我将创建一个ArrayBlockingQueue<Connection>,create come 连接对象,并在 ajvm 启动时将它们放入队列中。然后以某种形式的枚举单例包装它,这样只有一个这样的队列,并且它在 JVM 的生命周期内保持活动状态。

然后使用某种实用程序/驱动程序类从队列中获取连接并将它们返回到队列中。

我在想我还需要对此说些什么?我是否需要使队列线程安全,以便多个请求没有相同的连接?

4

1 回答 1

0

在我看来,您在这里遗漏了几点:

  1. 连接返回池时应返回初始状态。例如,connection.setAutocommit(...); 绝对应该恢复

  2. 将本机连接包装到您自己的 javax.sql.Connection 接口实现中以控制和监视对连接执行的操作不是一个好主意。使用这种模式,您还可以实现一个有价值的功能:在 close() 时将连接返回到池;称呼

  3. 您需要一些方法来根据实际池利用率控制池中的连接数。看一下Java集合中“容量”和“负载因子”是如何实现的,大致了解一下实现思路

  4. 如果连接还活着,应该监控它们。为所有可能的数据库归档并不容易。

于 2013-08-28T18:21:28.767 回答