连接池的作用就是用来管理连接,提升连接的利用效率
hibernate中连接池如何配置
<!-- 1. 数据库连接配置 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hib_demo</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">abc</property>
<!--
数据库方法配置, hibernate在运行的时候,会根据不同的方言生成符合当前数据库语法的sql
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!-- 2. 其他相关配置 -->
<!-- 2.1 显示hibernate在运行时候执行的sql语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 2.2 格式化sql
<property name="hibernate.format_sql">true</property> -->
<!-- 2.3 自动建表 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- *********连接池配置*********** -->
<!-- 配置连接池驱动管理类 -->
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!-- 配置连接池参数信息 -->
<property name="hibernate.c3p0.max_size">5</property> <!-- 最大连接数 -->
<property name="hibernate.c3p0.min_size">2</property> <!-- 最小连接数 -->
<property name="hibernate.c3p0.timeout">5000</property> <!-- 超时时间 -->
<property name="hibernate.c3p0.max_statements">100</property> <!-- 最大执行的命令格个数 -->
<property name="hibernate.c3p0.idle_test_period">30000</property> <!-- 空闲测试时间 -->
<property name="hibernate.c3p0.acquire_increment">2</property> <!-- 连接不够用时,每次增加的个数 -->
<!--
#hibernate.c3p0.max_size 2
#hibernate.c3p0.min_size 2
#hibernate.c3p0.timeout 5000
#hibernate.c3p0.max_statements 100
#hibernate.c3p0.idle_test_period 3000
#hibernate.c3p0.acquire_increment 2
#hibernate.c3p0.validate false
-->
</session-factory>
2)hibernate使用C3P0连接池,除了hibernate的jar包,当然还要导入C3P0jar包了(如:c3p0-0.9.1.2.jar),否则报错.
JDBC配置连接池 示例C3p0
try{
ComboPooledDataSource source = new ComboPooledDataSource();
source.setDriverClass("com.mysql.jdbc.Driver");
source.setJdbcUrl("jdbc:mysql:///day11");
source.setUser("root");
source.setPassword("root");
conn = source.getConnection();
ps = conn.prepareStatement("select * from account");
rs = ps.executeQuery();
while(rs.next()){
String name = rs.getString("name");
System.out.println(name);
}
}catch (Exception e) {
e.printStackTrace();
}finally{
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
rs = null;
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
ps = null;
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
conn = null;
}
}
}
}
第二种方式 创建出c3p0的配置文件 然后加载
<?xml version="1.0" encoding="utf-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///c3p0test</property>
<property name="user">root</property>
<property name="password">root</property>
</default-config>
<named-config name="mysql2">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///c3p0test1</property>
<property name="user">root</property>
<property name="password">root</property>
</named-config>
C3p0的使用较为简单,通常来说只要在src目录下添加一个c3p0的配置文件,在程序中使用一句代码
1)ComboPooledDataSource source = new ComboPooledDataSource()使用配置文件中的默认配置,或者
2)ComboPooledDataSource source = new ComboPooledDataSource(“配置文件中name-config的名称”)使用配置文件中的其他配置
第二种连接池的创建DBCP
一、导包
Apache官网下载DBCP包,导入两个包路径如下:
commons-dbcp-1.4-bin\commons-dbcp-1.4\commons-dbcp-1.4.jar:连接池的实现
commons-pool-1.5.6-bin\commons-pool-1.5.6\commons-pool-1.5.6.jar:连接池实现的依赖库
CSDN上jar包的下载地址:http://download.csdn.net/detail/u012802702/9491642
二、代码示例:
方式一:使用BasicDataSource 通过方法设置连接参数。
//获取BasicDataSource并配置,开始....
BasicDataSource source = new BasicDataSource();
source.setDriverClassName("com.mysql.jdbc.Driver");
source.setUrl("jdbc:mysql:///dbcptest");
source.setUsername("root");
source.setPassword("root");
//获取BasicDataSource并配置,结束......
try {
conn = source.getConnection();
ps = conn.prepareStatement("select * from account");
rs = ps.executeQuery();
while (rs.next()) {
String name = rs.getString("name");
System.out.println(name);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs = null;
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
ps = null;
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
conn = null;
}
}
}
方式二:使用BasicDataSourceFactory +配置文件
try { //获取并配置DataSource开始
Properties prop = new Properties();
prop.load(new FileReader("dbcp.properties"));
BasicDataSourceFactory factory = new BasicDataSourceFactory();
DataSource source = factory.createDataSource(prop);
//获取并配置DataSource,结束
conn = source.getConnection();
ps = conn.prepareStatement("select * from account");
rs = ps.executeQuery();
while (rs.next()) {
String name = rs.getString("name");
System.out.println(name);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
rs = null;
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
ps = null;
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
conn = null;
}
}
}
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root
password=
#<!-- 初始化创建的连接数,当不够时再去创建 -->
initialSize=10
#最大连接数量,连接数连不能超过该值
maxActive=50
#<!-- 最大空闲连接,当空闲连接超过该值时就挨个关闭多余的连接,但不能小于minldle -->
maxIdle=20
#<!-- 最小空闲连接,空闲连接的最下值 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒,当连接超过该时间便认为其实空闲连接 -->
maxWait=60000
#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=gbk
#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true
#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED
还有一种就是tomcat内置数据源(暂未深了解)