我遇到了这个采访问题:你将如何管理数据库连接池?
我的想法是:
我将创建一个ArrayBlockingQueue<Connection>,
创建来连接对象,并在ajvm启动时将它们放入队列中。然后将它包装在枚举单例的某种形式中,这样只有一个这样的队列,它在JVM的生命周期内保持活动状态。
然后使用某种实用程序/驱动程序类,它将从队列中获取连接并将它们返回队列。
我在想我还需要对此说些什么?我是否需要使队列线程安全,以便多个请求不具有相同的连接?
答案 0 :(得分:0)
在我的意见中,你在这里遗漏了几点:
返回池时,连接应返回初始状态。例如,connection.setAutocommit(...);绝对应该还原
将本机连接包装到您自己的javax.sql.Connection接口实现中以控制和监视对连接执行的操作不是一个好主意。使用此模式,您还可以实现一个有价值的功能:将连接返回到close();调用
您需要一些manans来根据实际池利用率来控制池中的连接数。看看如何在Java集合中实现“容量”和“加载因子”以获得粗略的实现想法
如果它们还活着,应该监控连接。存档所有可能的数据库并不容易。