基于JDBC的数据库连接池高效管理策略 - 编程入门网
conn = getIdleConnectionFromPoll( );
userId = getUserId( );
registerTrans(userId, conn);
…
}
在我们的实现中,用户标识是通过使用者所在的线程来标识的。后面的所有对于数据库的访问都是通过查找该注册表,使用已经分配的连接来完成的。当事务结束时,从注册表中删除相应表项。 对于嵌套的事务如何处理呢?我们采用的方法仍为引用记数,不过这里的引用记数是指的"嵌套层次",具体的细节,不再赘述。 4.3、封装 从上面的论述可以看出,普通的数据库方法和事务方法对于连接的使用(分配、释放)是不同的,为了便于使用,对外提供一致的操作接口,我们对连接进行了封装:即普通连接和事务连接。在此,我们利用了Java中的强大的面向对象特性:多态。普通连接和事务连接均实现了一个DbConnection接口,对于接口中定义的方法,分别根据自己的特点作了不同的实现,这样在对于连接的处理上就非常的一致了。 4.4、并发问题 为了是我们的连接管理服务有更大的通用性,就必须要考虑到多线程环境,即并发问题。在一个多线程的环境下,我们必须要保证连接管理自身数据的一致性和连接内部数据是一致性,还好Java提供对这方面的很好的支持(synchronized关键字),这样我们就很容易使连接管理成为线程安全的。 5、结论 本文给出了一个基本的连接管理框架,在其中使用了一些广泛使用的设计模式(资源池,引用记数等),使得高效、安全的复用数据库连接成为可能。当然,还有一些问题没有考虑到,比如:没有实现对不同种类的数据库的联合管理;没有提供定时检测机制,查询连接的状态等。另外在连接管理的使用包装上比起一些商用的系统还显粗糙,但是底层的基理是一致的,所以通过本文相信对于这些商用的产品中的相关功能会有更好的理解。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |