tomcat5一般都用DBCP的连接池,但是DBCP有bug,访问量大以后就经常报错,而且速度变的很慢。
所以改用C3P0连接池,先从http://sourceforge.net/projects/c3p0/下载最新的C3P0连接池,将lib下的两个jar文件,连同数据库的JDBC驱动一起复制到tomcat/common/lib文件夹下。
C3P0的文档中说明配置tomcat5要修改server.xml文件,但是怎么修改都不能正常工作。
后发现在conf/Catalina/localhost文件夹下有一个和程序名一样的xml文件,把以下代码加入到这个文件的<Context></Context>中,
<
Resource
name
="jdbc/pooledDS"
auth
="Container"
type
="com.mchange.v2.c3p0.ComboPooledDataSource"
/>
<
ResourceParams
name
="jdbc/pooledDS"
>
< parameter > < name > factory </ name > < value > org.apache.naming.factory.BeanFactory </ value > </ parameter >
< parameter > < name > driverClass </ name > < value > org.postgresql.Driver </ value > </ parameter >
< parameter > < name > jdbcUrl </ name > < value > jdbc:postgresql://localhost/c3p0-test </ value > </ parameter >
< parameter > < name > user </ name > < value > swaldman </ value > </ parameter > < parameter > < name > password </ name > < value > test </ value > </ parameter >
< parameter > < name > minPoolSize </ name > < value > 5 </ value > </ parameter >
< parameter > < name > maxPoolSize </ name > < value > 15 </ value > </ parameter >
< parameter > < name > acquireIncrement </ name > < value > 5 </ value > </ parameter >
</ ResourceParams >
< parameter > < name > factory </ name > < value > org.apache.naming.factory.BeanFactory </ value > </ parameter >
< parameter > < name > driverClass </ name > < value > org.postgresql.Driver </ value > </ parameter >
< parameter > < name > jdbcUrl </ name > < value > jdbc:postgresql://localhost/c3p0-test </ value > </ parameter >
< parameter > < name > user </ name > < value > swaldman </ value > </ parameter > < parameter > < name > password </ name > < value > test </ value > </ parameter >
< parameter > < name > minPoolSize </ name > < value > 5 </ value > </ parameter >
< parameter > < name > maxPoolSize </ name > < value > 15 </ value > </ parameter >
< parameter > < name > acquireIncrement </ name > < value > 5 </ value > </ parameter >
</ ResourceParams >
同样的,要在web.xml中加入
<
resource
-
ref
>
< res - ref - name > jdbc / pooledDS </ res - ref - name >
< res - type > javax.sql.DataSource </ res - type >
< res - auth > Container </ res - auth >
</ resource - ref >
< res - ref - name > jdbc / pooledDS </ res - ref - name >
< res - type > javax.sql.DataSource </ res - type >
< res - auth > Container </ res - auth >
</ resource - ref >
程序中的调用和其他连接池是一样的:
InitialContext ic
=
new
InitialContext();
DataSource ds = (DataSource) ic.lookup( " java:comp/env/jdbc/pooledDS " );
DataSource ds = (DataSource) ic.lookup( " java:comp/env/jdbc/pooledDS " );