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
2Context context=new InitialContext();
DataSource dataSource=(DataSource)context.lookup("java:comp/env/jdbc/bookshop");
其中 java:comp/env/ 为前缀,使用 lookup() 方法获取数据源对象后,可以使用 DataSource 对象的 getConnection() 方法获取数据库连接对象。1
Connection con=dataSource.getConnection();
配置数据源名称
配置 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" />创建并配置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属性添加数据库驱动文件
把 MySQL 的驱动程序复制到 Tomcat 根目录的 \lib 目录。