Hibernate 连接池配置配置

本文介绍了Hibernate连接池的配置,包括Hibernate内置连接池、javax.sql.DataSource连接池(以Tomcat为例)、C3P0数据库连接池和Proxool数据库连接池的配置方法,并提供了相关配置文件和依赖引入的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、Hibernate内置连接池

hibernate.cfg.xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<!-- Database connection settings -->
		<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
		<property name="connection.url">jdbc:mysql://192.168.56.101:3306/bookstore?useSSL=false</property>
		<property name="connection.username">billy</property>
		<property name="connection.password">xxxxxx</property>
		<property name="show_sql">true</property>

		<mapping class="com.zhangdb.hibernate.Book" />
	</session-factory>
</hibernate-configuration>

以上配置没有明确说明使用何种类型连接池,Hibernate会使用内置的连接池实现,采用默认值。这种实现并非面向生产环境,多用于开发测试。

2、javax.sql.DataSource连接池

Hibernate可以与javax.sql.DataSource类型的连接池集成,通过JNDI方式直接从连接池取得连接。

以Tomcat为例,可以修改Tomcat的conf下的context.xml文件,在这里边定义连接数据库的信息及连接池配置。当然context.xml文件也可以放置在web项目下的META-INF目录下。前者Tomcat下的所有WEB都可以使用,后者则只有当前WEB应用可以使用。内容如下:

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

<Context>
	<Resource
		name="jdbc/bookstore"
		auth="Container"
		type="javax.sql.DataSource"
		maxActive="10"
		maxIdle="3"
		maxWait="10000"
		driverClassName="com.mysql.cj.jdbc.Driver"
		url="jdbc:mysql://192.168.56.101:3306/bookstore?useSSL=false"
		username="billy"
		password="xxxxxx" />
</Context>

在web应用的web.xml中引用该资源,如:

<web-app>
	<resource-ref>
		<description>DB Connection</description>
		<res-ref-name>jdbc/bookstore</res-ref-name>
		<res-type>javax.sql.DataSource</res-type>
		<res-auth>Container</res-auth>
	</resource-ref>
</web-app>

hibernate的配置文件改为如下内容:

<hibernate-configuration>
	<session-factory>
		<!-- Database connection settings -->
		<property name="connection.datasource">java:comp/env/jdbc/bookstore</property>
		<property name="dialect">org.hibernate.dialect.MySQL8Dialect</property>
		<property name="show_sql">true</property>

		<mapping class="com.zhangdb.hibernate.Book" />
	</session-factory>
</hibernate-configuration>

关键是这句话:<property name="connection.datasource">java:comp/env/jdbc/bookstore</property>

这样Hibernate就可以直接使用由Tomcat容器管理的连接池。

如何为Tomcat设置数据库连接池资源,参考文档:https://www.codejava.net/servers/tomcat/configuring-jndi-datasource-for-database-connection-pooling-in-tomcat

3、C3P0数据库连接池

javax.sql.DataSource连接池是由Tomcat容器管理的,也可以创建由项目自己管理的数据库连接池,C3P0是其中一种。

首先引入C3P0的相关jar包,如果用maven管理依赖,则在项目的pom文件中加入如下内容:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-c3p0</artifactId>
    <version>5.4.1.Final</version>
</dependency>

hibernate.cfg.xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<!-- Database connection settings -->
		<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
		<property name="connection.url">jdbc:mysql://192.168.56.101:3306/bookstore?useSSL=false</property>
		<property name="connection.username">billy</property>
		<property name="connection.password">******</property>

		<!-- Database connection pool setting -->
		<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
		<property name="hibernate.c3p0.min_size">5</property>
		<property name="hibernate.c3p0.max_size">20</property>
		<property name="hibernate.c3p0.timeout">120</property>
		<property name="hibernate.c3p0.idle_test_period">3000</property>
		<property name="show_sql">true</property>

		<mapping class="com.zhangdb.hibernate.Book" />
	</session-factory>
</hibernate-configuration>

里边既包括数据库连接配置信息,也包含C3P0连接池配置信息。C3P0的连接池属性还有很多,它实现了很多功能,可参考相关文档查看。

4、Proxool数据库连接池

导入proxool依赖包,pom配置:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-proxool</artifactId>
    <version>5.4.1.Final</version>
</dependency>

在项目class path目录下增加proxool.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
  <proxool>
    <alias>ProxoolPool</alias>
    <driver-url>jdbc:mysql://192.168.56.101:3306/bookstore?useSSL=false</driver-url>
    <driver-class>com.mysql.cj.jdbc.Driver</driver-class>
    <driver-properties>
      <property name="user" value="billy"/>
      <property name="password" value="******"/>
    </driver-properties>
     
    <maximum-connection-count>20</maximum-connection-count>  
    <minimum-connection-count>5</minimum-connection-count> 
    <house-keeping-sleep-time>90000</house-keeping-sleep-time> 
    <maximum-new-connections>10</maximum-new-connections> 
    <prototype-count>5</prototype-count>  
    <test-before-use>true</test-before-use> 
    <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>    
  </proxool>
</something-else-entirely>

hibernate.cfg.xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<!-- Proxool Database connection settings -->
		<property name="hibernate.proxool.pool_alias">ProxoolPool</property>
		<property name="hibernate.proxool.xml">proxool.xml</property>
		<property name="hibernate.connection.provider_class">org.hibernate.proxool.internal.ProxoolConnectionProvider</property>
		<property name="show_sql">true</property>

		<mapping class="com.zhangdb.hibernate.Book" />
	</session-factory>
</hibernate-configuration>

5、其它连接池配置

除了以上四种方式,Hibernate还支持其它类型的数据库连接池配置。详细可参考:http://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#database

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值