Hibernate3学习笔记(7)——数据库连接池技术

来源:互联网 发布:李明linux视频教程 编辑:程序博客网 时间:2024/05/22 15:39

在java应用程序开发中,访问和操作数据库,一般是通过JDBC等技术来实现。而传统的JDBC方式操作数据库已经不能满足项目开发的需求。

在一个基于数据库的WEB系统中,建立数据库连接的操作将是系统中代价最大的操纵之一,通常成为制约网站速度的瓶颈。在使用传统的模式中,必须去管理每一个连接,以确保他们能被正确关闭,如果出现程序异常而导致某些连接未能关闭,将导致数据库系统中的内存泄露,最终不得不不重启数据库。

连接池技术有效地解决了上述问题,其基本思想是在初始化时预先建立一些连接并存放在连接池中备用。当应用程序需要建立数据库连接时,只需从连接池中取出一个未使用的连接,而不必新建。使用完或,只需放回连接池即可。连接的建立、断开由连接池自身来管理,连接池可以释放超过最大空闲时间的数据库连接,以避免没有释放而造成的数据库连接遗漏。另外,还可以通过设置连接池的参数来控制连接池中的连接数、每个连接的最大使用次数等。

因此,连接池技术不仅提高了数据库连接的使用效率,使得大量用户可以共享较少的数据库连接,还省去了建立数据库连接的时间。

由于数据源(DataSource)对象是由Web容器(如tomcat)提供的,因此无法在程序中使用创建实例的方法产生数据源对象。这时可用JNDI技术获得数据源对象。

JNDI,是java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。如同其他JAVA技术,JNDI是provider-based技术,暴露了一个API和一个服务供应接口(SPI)。这意味着任何基于名字的技术都能通过JDNI而提供服务。很多JAVA技术,包括EJB都依靠JNDI来组织和定位实体。可以把它理解为一种将对象和名字捆绑的技术,对象工厂负责生产出对象,这些对象都和唯一的名字绑在一起,外部资源可以通过名字获得某对象的引用。
在javax.naming的包中提供Context接口,该接口提供了以下两种常用方法。
1、void bind(String name , Object object)
该方法用于将名称绑定到对象,所有中间上下文和目标上下文都必须已经存在。
2、Object lookup(String name)
该方法用于检索指定的名字绑定的对象。如果name为空,则返回此上下文的一个新实例。例如,以下代码可获取名称为jdbc/bookshop的数据源对象:

Context context = new InitialContext();DataSource dataSource = (DataSource)context.lookup("java:comp/env/jdbc/bookshop");

其中,java:comp/env/为前缀。使用lookup()方法获取数据源对象后,可以使用DataSource对象getConnection()方法获取数据库连接对象。

Connection conn = dataSource.getConnection( );

在使用lookup()方法查找数据源时,参数形式为:“前缀+数据源名称”。

0 0