Tomcat5.5 Hibernate3 配置数据库连接池2

上文配置的方式,后来发现,会增加部署的负担。后来找个一个可以不再tomcat里改文件的方式。

在工程/WebRoot/META-INF/下面,新建一个context.xml文件。内容如下:

<?xml version='1.0' encoding='utf-8'?>
<Context>
<Resource auth="Container" description="DB Connection"
driverClassName="org.gjt.mm.mysql.Driver"
maxActive="50" maxIdle="10" maxWait="5000" name="jdbc/DBPool" factory="org.apache.commons.dbcp.BasicDataSourceFactory"
type="javax.sql.DataSource"
url="jdbc:mysql://xx.xx.xx.xx:3306/xxx?characterEncoding=utf8&amp;autoReconnect=true&amp;failOverReadOnly=false" username="xxxxxx" password="xxxxxx"/>

<!-- Resource auth="Container" description="DB Connection"
driverClass="com.mysql.jdbc.Driver" maxPoolSize="10" minPoolSize="2"
acquireIncrement="2" name="jdbc/DBPool" user="xxxxxx"
password="xxxxxx" factory="org.apache.naming.factory.BeanFactory"
type="com.mchange.v2.c3p0.ComboPooledDataSource"
jdbcUrl="jdbc:mysql://xx.xx.xx.xx:3306/xxx?autoReconnect=true" />-->
</Context>

上面是俩个数据源的配置方法,我把第二个注释掉了。下面的是c3p0的,听说不错。当配置再工程里的时候需要加俩个jar包commons-dbcp.jar,commons-pool-1.4.jar。如果使用c3p0的方式,需要导入c3p0-0.9.0.4.jar包。

除了上面的修改,还需要再web.xml里添加如下内容:

<resource-ref>
<description>MySQL DB Connection Pool</description>
<res-ref-name>jdbc/DBPool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

总结:不过这也有个问题是这个数据源是局部的,不能多工程共享。如果一个tomcat上有多个工程用到一个database,还是推荐使用tomcat里面的配置方式。

注:今天发现mysql连接串原来可以添加好多参数:
今天发现了三个新的,autoReconnect(当数据库连接异常中断时,是否自动重新连接?) autoReconnectForPools(是否使用针对数据库连接池的重连策略),failOverReadOnly(自动重连成功后,连接是否设置为只读?),主要是用来当连接断了后,提供自动重连功能。还有串各参数之间需要填加&amp;来分隔。我现在一般用的串如下:
jdbc:mysql://xx.xx.xx.xx:3306/mimms?characterEncoding=utf8&amp;autoReconnect=true&amp;autoReconnectForPools=true&amp;failOverReadOnly=false
后面几个我也不知道管不管用,反正mysql文档写了,我也用上去吧。

你可能感兴趣的:(apache,sql,tomcat,mysql,jdbc)