连接池有那几种 分别有什么区别

2025-03-22 18:38:24
推荐回答(1个)
回答1:

在讲解连接池之前,先弄懂以下几个概念:

数据源:Data source , 读取数据的来源,也就是说你的系统要读取的数据去什么地方找(存放数据的地方)!

JDBC:全称为Java DataBase Connectivity standard, 它是一个面向对象的应用程序接口(API), 通过它可访问各类关系数据库。
两者之间的关系: 数据源并不等于连接池,数据源不是必须要求实现连接池的,即连接池是数据源的一种.

c3p0: hibernate.cfg.xml中配置





com.mysql.jdbc.Driver

jdbc:mysql://localhost:3306/application_context
true
UTF-8
root

paul


org.hibernate.connection.C3P0ConnectionProvider

20

5

120

100

120

2


……



dbcp: hibernate.cfg.xml中配置
100
1
60000
10

100
1
60000
10

proxool: hibernate.cfg.xml中配置 先写proxool的配置文件,文件名:proxool.xml(一般放在与hibernate.cfg.xml文件在同一个目录中)




DBPool


jdbc:mysql://localhost:3306/application_context?useUnicode=true&characterEncoding=UTF8


com.mysql.jdbc.Driver






90000

20

5


100
10

配置hibernate.cfg.xml文件



org.hibernate.connection.ProxoolConnectionProvider
DBPool
proxoolconf.xml

.JNDI: hibernate.cfg.xml中配置JNDI连接池,数据源已经由应用服务配置好(如Web服务器),Hibernate需要做的只是通过JNDI名查找到此数据源。应用服务器将连接池对外显示为JNDI绑定数据源,它是javax.jdbc.Datasource类的一个实例。只要配置一个Hibernate文件,如: hibernate.connection.datasource=java:/comp/env/jdbc/JNDI_NAME //JNDI名
hibernate.transaction.factory_class = org.hibernate.transaction.JTATransactionFactory
hibernate.transaction.manager_loopup_class=org.hibernate.transaction.JBossTransactionManagerLookup
hibernate.dialect=org.hibernate.dialect.MySQLDialect

区别:在hibernate3.0中,已经不再支持dbcp了,hibernate的作者在hibernate.org中,明确指出在实践中发现 dbcp有BUG,在某些种情会产生很多空连接不能释放,所以抛弃了对dbcp的支持。proxool不少行家推荐使用.c3p0占用资源比较大,效率也不高.