目录
前言
一般连接池不需要我们自己写!有开源组织为我们提供了一些连接池 ;
常见的有:
1、DBCP 数据库连接池
2、C3P0 数据库连接池
3、Tomcat内置的连接池(其实也是通过dbcp实现的)
DBCP
DBCP数据源(就是数据库连接池)
·DBCP是Apache软件基金组织下的开源连接池实现,使用DBCP数据源,应用软件应在系统中增加如下两个jar文件:
·Commons-dbcp.jar :连接池的实现
·Commons-pool.jar :接池实现的额依赖库
·Commons-logging.jar :还需要这个依赖(老方当年还不需要导入这个jar包·)
·Tomcat的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可以由应用程序独立使用 ;
- 使用方法:(java 代码:)
private static BasicDataSource dataSource ;
static {
try {
Properties properties = new Properties();
// 关联配置文件
properties.load(JdbcDbcpUtils.class.getResourceAsStream("/ijava/xin/properties/dbcpconfig.properties"));
// 读取配置文件
dataSource = BasicDataSourceFactory.createDataSource(properties) ;
} catch (Exception e) {
throw new ExceptionInInitializerError(e) ;
}
}
- 配置文件写法
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///user?useUnicode=true&characterEncoding=UTF8
username=root
password=root
#<!-- 初始化连接 -->
initialSize=10
#最大连接数量
maxActive=50
#<!-- 最大空闲连接 -->
maxIdle=20
#<!-- 最小空闲连接 -->
minIdle=5
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000
#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=utf8
#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true
#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=
#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_COMMITTED
C3P0
C3P0数据源 ( Spring 内置的连接池)
需要我们给它一个配置文件,否则我们就只能在在代码中进行指定配置;
该配置文件的名字,必须是 c3p0-config.xml
;
并且这个配置文件的路径,必须是在 src根目录
下面,也就是说 在 src/xxx/
下面 都不行。。。
代码
private static ComboPooledDataSource comboPooledDataSource;
static {
try {
// 有配置文件的情况下,可直接根据参数获取对应的配置;
// 不写参数,就是使用默认配置
comboPooledDataSource = new ComboPooledDataSource();
// 没有配置文件的情况下,需要自己手动添加配置
// comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");
// comboPooledDataSource.setJdbcUrl("jdbc:mysql:///user");
// comboPooledDataSource.setUser("root");
// comboPooledDataSource.setPassword("root");
// comboPooledDataSource.setMaxPoolSize(30);
// comboPooledDataSource.setMinPoolSize(5);
// comboPooledDataSource.setInitialPoolSize(10);
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
配置文件
<c3p0-config>
<!--默认配置-->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///user</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">20</property>
<property name="minPoolSize">5</property>
<property name="maxStatements">200</property>
</default-config>
<named-config name="mysql">
<property name="acquireIncrement">50</property>
<property name="initialPoolSize">100</property>
<property name="minPoolSize">50</property>
<property name="maxPoolSize">1000</property><!-- intergalactoApp adopts a different approach to configuring statement caching -->
<property name="maxStatements">0</property>
<property name="maxStatementsPerConnection">5</property>
<!--下面可以写一些覆盖配置,即默认配置不符合你的要求,你可以修改不符合你要求的部分-->
</named-config>
<named-config name="oracle">
<property name="acquireIncrement">50</property>
<property name="initialPoolSize">100</property>
<property name="minPoolSize">50</property>
<property name="maxPoolSize">1000</property><!-- intergalactoApp adopts a different approach to configuring statement caching -->
<property name="maxStatements">0</property>
<property name="maxStatementsPerConnection">5</property>
</named-config>
</c3p0-config>
Tomcat内置数据源
配置Tomcat数据源
其实在我们需要使用数据库连接池的时候,我们大可不必添加第三方的jar包;因为我们的Tomcat内部内置了连接池 ;
有3种方法配置:
1、在服务器里面用Context文件里面配置 (不可取)
2、在服务器里面的catelina 里边加上一个配置文件 (不可取)
3、我们可以发现前两种,方法都需要去改动服务器 ; 第三种则是在web目录下面新建一个 MATE-INF ,下面新建一个context.xml文件,在里面配置连接池 ;
配置文件写法
配置文件写法:在`tomcat`的服务器首页有 : a、先点击 JDBC DataSource b、再点击 JNDI Resource 里面找 ;
<Context> ... <Resource name="jdbc/EmployeeDB" auth="Container" type="javax.sql.DataSource" username="dbusername" password="dbpassword" driverClassName="org.hsql.jdbcDriver" url="jdbc:HypersonicSQL:database" maxActive="8" maxIdle="4"/> ... </Context>
但是这种写法也有问题的,必须将mysql的驱动,加到tomcat的服务器里面。而不是项目里面,相对其他2种方法,这是改动服务器最少的方法了 ;
连接关闭问题
使用了数据库连接池框架以后,就不再需要我们去关注连接的关闭问题了,框架自己会将用完的连接放回到连接池里面;
但是使用了事务的连接,还是需要我们自己去关闭的 ;
备注
清理服务器的时候,注意不是仅仅将服务器 webApps
下面的应用删掉就好了,还要注意应用是否产生了一些文件在 conf
下面的配置中 ;要一并删掉 ;