连接池,一个很神秘又犀利的话题。
在java里面有一个接口,javax.sql.Datasource,这是一个接口,它里面有个方法getConnection(),即通过它就可以取出connection.
许多框架都实现了这个接口,如spring,hibernate,c3p0,proxool,甚至是tomcat也实现了。
因为tomcat中实现的,即通过JNDI实现的,
最好的学习资料当然是官方文档:http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html#JDBC_Data_Sources
从官网复制下来的例子:
<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>
照着配置就行了。
- 疑问1,一直比较困扰我,就是在context.xml中配置了后,是否要在web.xml中进行如下配置?
<resource-ref> <description> Resource reference to a factory for java.sql.Connection instances that may be used for talking to a particular database that is configured in the <Context> configurartion for the web application. </description> <res-ref-name> jdbc/EmployeeDB </res-ref-name> <res-type> javax.sql.DataSource </res-type> <res-auth> Container </res-auth> </resource-ref> |
|
官网中有这样一句话:
If a resource has been defined in a <Context> element it is not necessary for that resource to be defined in /WEB-INF/web.xml. However, it is recommended to keep the entry in /WEB-INF/web.xml to document the resource requirements for the web application.
它的意思是说如果在context中配置了resource后,就没有必须再在web.xml中配置了,但是推荐在web.xml中保持一个入口来证明resource的需求,即为了说明下,既然是说明,那么就是可加可不加了,因为从规范的角度来说最好是加,但是我看了网上好多人的例子都没有加,而且我不加,在tomcat中测试也能正常工作。
疑问2:resource配置中是否要配置factory这个属性,因为官网在global resource中配置的时候加了的,但是在一般的resource配置的时候却又不加,我没加在tomcat中也能正常工作,所以我就暂时先不加吧。
下面是一些框架中实现连接池的代码:
Hibernate中连接池的写法:http://developer.51cto.com/art/200906/129914.htm
作者得出tomcat中的DBCP有BUG,hibernate中实现的连接池有BUG,c3p0有BUG,最好的方法是用proxool。
Spring中连接池的写法:http://www.blogjava.net/lzj520/archive/2008/03/19/187211.html
其实Spring的连接池也是用DBCP来实现的;
这篇文章非常全,亮点是竟然融入了C3P0的写法,赞!
还有一篇文章也是讲spring jndi的配置的:http://karidyang.iteye.com/blog/216125
tomcat中连接池的配置1:http://stackoverflow.com/questions/10137828/jndi-resource-definition-in-apache-tomcat-6
tomcat中连接池的配置2:http://stackoverflow.com/questions/9183321/how-to-use-jndi-datasource-provided-by-tomcat-in-spring
tomcat5.5中连接池的写法3:http://www.iteye.com/topic/25161?page=2
它提到了要在resource中加入factory的概念
====================================================
refurl:http://bbs.csdn.net/topics/300211091
最古老的DBCP