Hibernate-使用数据库连接池

Hibernate 配置连接池的方式:

  • 使用 Hibernate 自带的连接池。
  • 使用配置文件指定的数据库连接池。
  • 从容器中获取连接池(如:Tomcat)。

使用配置文件指定的连接池 C3P0、Proxool

使用 C3P0

首先引入 c3p0 的jar包,然后在 Hibernate 的配置文件 hibernate.cfg.xml 中进行配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!--C3P0配置 -->
<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="automaticTestTable">Test</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">120</property>
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="c3p0.testConnectionOnCheckout">true</property>
<property name="c3p0.idleConnectionTestPeriod">18000</property>
<property name="c3p0.maxIdleTime">25000</property>
<property name="c3p0.idle_test_period">120</property>

利用 JNDI 技术从 Tomcat 中获取数据源

数据源(DataSource)对象由 Web 容器(Tomcat)提供,此时利用 JNDI 获得数据源对象。可以把它理解为一种将对象和名字捆绑的技术,对象工厂负责生产出对象,这些对象都与唯一的名字绑在一起,外部资源可以通过名字获得某对象的引用。

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

  • void bind(String name,Object object):该方法用于将名称绑定到对象,所有中间上下文和目标上下文都必须已经存在。
  • Object lookup(String name):该方法用于检索指定的名字绑定的对象。如果 name 为空,则返回此上下文的一个新实例。以下代码可以获取名称为 jdbc/bookshop 的数据源对象:
    1
    2
    Context context=new InitialContext();
    DataSource dataSource=(DataSource)context.lookup("java:comp/env/jdbc/bookshop");

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

1
Connection con=dataSource.getConnection();

配置数据源名称

  1. 配置 context.xml 文件
    在 Tomcat 根目录 \conf\context.xml文件中的<Context> 节点中添加 <Resource> 节点,内容如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <Resource 
    name="jdbc/bookshop"
    auth="Container"
    type="javax.sql.DataSource"
    maxActive="100"
    maxIdle="30"
    maxWait="10000"
    username="root"
    password="1234"
    driverClassName="com.mysql.jdbc.Driver"
    url="jdbc:mysql://localhost:3306/bookshop" />
  2. 创建并配置web.xml文件
    web.xml<web-app> 节点下添加 <resource-ref> 节点,代码如下

    1
    2
    3
    4
    5
    <resource-ref>
    <description>BookShop DataSource</description>对应用资源的说明
    <res-ref-name>jdbc/bookshop</res-ref-name>指定所应用资源的JNDI名字,对应于<Resource>节点的name属性
    <res-type>javax.sql.DataSource</res-type>指定所引用资源的类名字,对应于<Resource>节点的type属性
    <res-auth>Container</res-auth>指定所应用资源的管理者,对应于<Resource>节点的auth属性
  3. 添加数据库驱动文件
    把 MySQL 的驱动程序复制到 Tomcat 根目录的 \lib 目录。

在 Hibernate 中使用数据库连接池