Hibernate使用数据库连接池

来源:互联网 发布:公安部网络安全局 编辑:程序博客网 时间:2024/05/17 01:45

java应用程序开发中,访问和操作数据库一般通过JDBC等技术实现,在基于数据库的web系统中,简历数据库连接的操作将是系统中代价最大的操作之一,通常成为制约网站速度的瓶颈。

使用传统模式时,必须去管理每一个连接,确保它们能被正确关闭,如果出现程序异常而导致某些连接未能关闭,将导致数据库系统中的内存泄漏,最终将不得不重启数据库。


连接池技术:初始化时先简历一些连接并存放在连接池中备用,当应用程序需要简历数据库连接,只需从连接池中取一个未使用的连接即可,不必新建,用完放回连接池。连接池可以释放超过最大空闲时间的数据库连接,以避免没有释放而造成的数据库连接遗漏。

由于数据源(DataSource)对象是由Web容器(如Tomcat)提供的,因此无法在程序中使用创建实例的方法产生数据源对象。这时可以使用JNDI技术获得数据源对象。可以把它理解为一种将对象和名字捆绑的技术,对象工厂负责生产出对象,这些对象都与唯一的名字绑在一起,外部资源可以通过名字获得某对象的引用。

javax.naming包提供了Context接口,该接口提供两种常用方法:

①void bind(String name,Object object):用于将名字绑定到对象,所有中间上下文和目标上下文都必须已经存在。

②Object lookup(String name):用于检索指定名字绑定的对象。若name为空,则返回此上下文的一个新实例。

例:Context  context=new InitialContext():

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

//获取数据库连接对象

Connection conn=dataSource.getConnection();


配置数据源名称

①配置context.xml文件:在Tomcat根目录/conf/context.xml文件中的<Context>节点中添加<Resource>节点:

<Resource  name="jdbc/bookshop"  auth="Contariner"  type="javax.sql.DataSource"  maxActive="100" maxIdle="30" 

maxWait="10000"  username="root"  password="123456"  driverClassName="com.mysql.jdbc.Driver" 

url="jdbc:mysql://localhost:3306/bookshop" />//标注编码不能用&,要用&amp;如:url="jdbc:mysql://localhost:3306/bookshop?useUnicode=true&amp;characterEncoding=utf-8"

②创建并配置web.xml文件

<web-app>节点下添加<resource-ref>子节点:

  <resource-ref>
  <description>Bookshop DataSource</description>
  <res-ref-name>jdbc/bookshop</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
  </resource-ref>

③添加数据库驱动文件:通过数据源访问数据库,由于数据源由Tomcat创建并维护,所以需要将MuSQL的驱动程序复制到Tomcat根目录的lib下。


在HIbernate中使用数据库连接池:

在hibernate.cfg.xml文件的Configuration视图中,选择Use JNDI DataSource指定JNDI数据源,DataSource输入“java:comp/env/jdbc/bookshop”

Dialect选择MySQL,其他项可以不选择。完成配置,进行测试:

项目中创建页面TestConnectionPool.jsp

<%@ page  import="com.hibtest2.TestCriteria %">

<% TestCriteria tc=new TestCriteria();   tc.testCriteria_1(); %>页面调用需要连接数据库的方法,启动Tomcat,打开页面,控制台输出连接数据库查询到的信息。

注意:因为是通过数据源的连接池打开的数据库,所以只能通过Tomcat来连接,在项目中单独运行测试方法无法再获得数据库连接,出错:Error parsing JNDI name。




0 0
原创粉丝点击