Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP。在配置连接池时需要注意的有三点:

一、Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池存在缺陷。如果你因为某种原因需要在Hibernate3中使用DBCP,建议采用JNDI方式。

二、默认情况下(即没有配置连接池的情况下),Hibernate会采用内建的连接池。但这个连接池性能不佳,且存在诸多BUG(笔者就曾在Mysql环境下被八小时连接悬空问题困扰过),因此官方也只是建议仅在开发环境下使用。

三、Hibernate2和Hibernate3的命名空间有所变化。例如,配置C3P0时的provider_class有Hibernate2环境下使用net.sf.hibernate.connection.C3P0ConnectionProvider,在Hibernate3环境下使用org.hibernate.connection.C3P0ConnectionProvider。

下面是Hibernate环境下几种常见的连接池配置:

1.Hibernate默认连接池

<?xml version='1.0' encoding='UTF-8'?> 

<!DOCTYPE hibernate-configuration 

PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" 

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 

<session-factory > 

<!—JDBC驱动程序--> 

<property name="connection.driver_class">com.mysql.jdbc.Driver</property> 

<!-- 连接数据库的URL--> 

<property name="connection.url"> 

jdbc:mysql://localhost:3306/schoolproject 

</property> 

<property name="connection.useUnicode">true</property> 

<property name="connection.characterEncoding">UTF-8</property> 

<!--连接的登录名--> 

<property name="connection.username">root</property> 

<!—登录密码--> 

<property name="connection.password"></property> 

<!--是否将运行期生成的SQL输出到日志以供调试--> 

<property name="show_sql">true</property> 

<!--指定连接的语言--> 

<property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

<!--映射Student这个资源--> 

<mapping resource="com/wqbi/model/pojo/student.hbm.xml" />
</session-factory>
</hibernate-configuration>

2.C3P0连接配置

<?xml version='1.0' encoding='UTF-8'?> 

<!DOCTYPE hibernate-configuration 

PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" 

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 

<session-factory > 

<!—JDBC驱动程序--> 

<property name="connection.driver_class">com.mysql.jdbc.Driver</property> 

<!-- 连接数据库的URL--> 

<property name="connection.url"> 

jdbc:mysql://localhost:3306/schoolproject 

</property> 

<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">UTF-8</property> 

<!--连接的登录名--> 

<property name="connection.username">root</property> 

<!--登录密码--> 

<property name="connection.password"></property> 

<!-- C3P0连接池设定--> 

<p
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider
</property> 

<property name="hibernate.c3p0.max_size">20</property> 

<property name="hibernate.c3p0.min_size">5</property> 

<property name="hibernate.c3p0.timeout">120</property> 

<property name="hibernate.c3p0.max_statements">100</property> 

<property name="hibernate.c3p0.idle_test_period">120</property> 

<property name="hibernate.c3p0.acquire_increment">2</property> 

<!--是否将运行期生成的SQL输出到日志以供调试--> 

<property name="show_sql">true</property> 

<!--指定连接的语言--> 

<property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

<!--映射Student这个资源--> 

<mapping resource="com/wqbi/model/pojo/student.hbm.xml" /> 

</session-factory> 

</hibernate-configuration>

3.proxool连接池

(1) 先写proxool的配置文件,文件名:proxool.xml(一般放在与hibernate.cfg.xml文件在同一个目录中)本例配置的是MYSQL数据库,数据库的名字为schoolproject

<?xml version="1.0" encoding="UTF-8"?> 

<!-- the proxool configuration can be embedded within your own application's. 

Anything outside the "proxool" tag is ignored. --> 

<something-else-entirely> 

<proxool> 

<!--连接池的别名--> 

<alias>DBPool</alias> 

<!--proxool只能管理由自己产生的连接--> 

<driver-url> 

jdbc:mysql://localhost:3306/schoolproject?useUnicode=true&amp;characterEncoding=UTF8 

</driver-url> 

<!—JDBC驱动程序--> 

<driver-class>com.mysql.jdbc.Driver</driver-class> 

<driver-properties> 

<property name="user" value="root"/> 

<property name="password" value=""/> 

</driver-properties> 

<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回 

收,超时的销毁--> 

<house-keeping-sleep-time>90000</house-keeping-sleep-time> 

<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的 

用户连接就不会被接受--> 

<maximum-new-connections>20</maximum-new-connections> 

<!-- 最少保持的空闲连接数--> 

<prototype-count>5</prototype-count> 

<!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的 

等待请求数由maximum-new-connections决定--> 

<maximum-connection-count>100</maximum-connection-count> 

<!-- 最小连接数--> 

<minimum-connection-count>10</minimum-connection-count> 

</proxool> 

</something-else-entirely>

(2)配置hibernate.cfg.xml文件

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 

<hibernate-configuration> 

<session-factory >
<property name="hibernate.connection.provider_class">
org.hibernate.connection.ProxoolConnectionProvider
</property>
<property name="hibernate.proxool.pool_alias">DBPool</property>
<property name="hibernate.proxool.xml">proxoolconf.xml</property>
<!--是否将运行期生成的SQL输出到日志以供调试-->
<property name="show_sql">true</property> 

<!--指定连接的语言--> 

<property name="dialect">org.hibernate.dialect.MySQLDialect</property> 

<!--映射Student这个资源--> 

<mapping resource="com/wqbi/model/pojo/student.hbm.xml" /> 

</session-factory> 

</hibernate-configuration>
  • hibernate.connection.provider_class定义Hibernate的连接加载类,这里Proxool连接池是用这个,不同的连接池有不同的加载类,可以查阅Hibernate文档获取相关信息
  • hibernate.proxool.pool_alias这里就是用我们上面提到的连接池的别名
  • hibernate.proxool.xml是向Hibernate声明连接池的配置文件位置,可以用相对或绝对路径,用相对路径时要注意一定在要Path范围内!不然会抛出异常。
  • dialect是声明SQL语句的方言
  • show_sql定义是否显示Hibernate生成的SQL语言,一般在调试阶段设为true,完成后再改成false,这样有利于调试。
  • <mapping >资源文件映射

Java Hibernate 之连接池详解的更多相关文章

  1. C3P0连接池详解及配置

    C3P0连接池详解及配置 本人使用的C3P0的jar包是:c3p0-0.9.1.jar <bean id = "dataSource" class = "com.m ...

  2. Java连接池详解

    于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式正是为了解决资源的频繁分配﹑释放所造成的问题.为解决我们的问题,可以采用数据库连接池技术.数据库连接池的基本思想就是为数 ...

  3. Android-Service基本用法、AIDL、Binder连接池详解

    本文介绍Service与Activity之间的通信,文章包含以下内容: 一.Service基本用法 二.通过AIDL实现Service与Activity跨进程通信 三.Binder连接池 四.使用Me ...

  4. Java 并发编程 | 线程池详解

    原文: https://chenmingyu.top/concurrent-threadpool/ 线程池 线程池用来处理异步任务或者并发执行的任务 优点: 重复利用已创建的线程,减少创建和销毁线程造 ...

  5. jedis连接池详解(Redis)

    转自:http://tianxingzhe.blog.51cto.com/3390077/1684306 原子性(atomicity): 一个事务是一个不可分割的最小工作单位,事务中包括的诸操作要么都 ...

  6. Tomcat 连接池详解

    (转) JDBC 连接池 org.apache.tomcat.jdbc.pool 是Apache-Commons DBCP连接池的一种替换或备选方案. 那究竟为何需要一个新的连接池? 原因如下: Co ...

  7. common-pool2连接池详解与使用

    我们在服务器开发的过程中,往往会有一些对象,它的创建和初始化需要的时间比较长,比如数据库连接,网络IO,大数据对象等.在大量使用这些对象时,如果不采用一些技术优化,就会造成一些不可忽略的性能影响.一种 ...

  8. 19、java内存分配 常量池详解

    在class文件中,“常量池”是最复杂也最值得关注的内容. Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int.long等等)和对象型(如Stri ...

  9. Java同步之线程池详解

    带着问题阅读 1.什么是池化,池化能带来什么好处 2.如何设计一个资源池 3.Java的线程池如何使用,Java提供了哪些内置线程池 4.线程池使用有哪些注意事项 池化技术 池化思想介绍 池化思想是将 ...

随机推荐

  1. 纯CSS3实现超立体的3D图片侧翻倾斜效果

    看到网友分享的一款CSS3 3D图片侧翻倾斜特效,觉得效果非常棒,其实话说回来,这玩意儿的实现真的非常简单,主要是创意不错.先来看看效果图.那么接下来我们分析一下源码吧,显示html代码,非常简单: ...

  2. bzoj 3831 Little Bird (单调队列优化dp)

    /*先贴个n*n的*/ #include<iostream> #include<cstdio> #include<cstring> #define maxn 100 ...

  3. jQuery中使用 .html() function在IE8和9中显示不正常源码中多出sizset和sizcache

    错误原因:在引入jquery的时候,使用了html function,在IE8和IE9下面有可能会出现不兼容 解决办法:在html头部加一句 <meta http-equiv="X-U ...

  4. (转)关于c#中的事件

    原文链接http://blog.csdn.net/joyhen/article/details/8500211 如有不明白的地方欢迎加QQ群14670545 探讨 最近在看委托,然后看到事件,以前一直 ...

  5. HTML 控件和web控件 OnClientClick和OnClick OnServerClick区别

      ^_^ 本来对html控件,服务器控件的知识模模糊糊的.今天特地查了相关的知识. 下面是我写代码总结的. 这些事件   主要用于在客户端执行验证,然后决定是否执行服务端事件   (没接触之前就为此 ...

  6. Lesson 6: Exploring the World of Typefaces

    Lesson 6: Exploring the World of Typefaces 这课提到的字体都是 英文 的. Article 1: More Google Web Fonts That Don ...

  7. 使用UILocalNotification给App添加本地消息通知

    使用过的代码,直接贴上 UILocalNotification *notification = [[UILocalNotification alloc] init]; if (notification ...

  8. 单点登录CAS使用记(八):使用maven的overlay实现无侵入的改造CAS

    前期在学习CAS部署的过程中,都是网上各种教程,各种方案不停的尝试. 期间各种侵入改源码,时间久了,改了哪个文件,改了哪段配置,增加了哪段代码,都有可能混淆不清了. 而且最大的问题是,万一换个人来维护 ...

  9. Struts2+Spring4+Hibernate4整合超详细教程

    Struts2.Spring4.Hibernate4整合 超详细教程 Struts2.Spring4.Hibernate4整合实例-下载 项目目的: 整合使用最新版本的三大框架(即Struts2.Sp ...

  10. jQuery自学笔记(二):jQuery选择器

    一.简单选择器 ID选择器:$('#box') 元素标签名:$('div') 类选择器:$('.box') jQuery提供了length和size()两种方法查看返回的元素,可验证ID在页面只出现一 ...