请教DBCP怎样配置数据库连接池?
请教DBCP怎样配置数据库连接池?
我本来的项目,是使用DriverManager直接建立和关闭数据库连接的。现在为了提高数据库访问性能,我想改为使用连接池。
可以使用JNDI上的数据源。但是,发布JNDI是一件比较麻烦的事情,各个服务器都不一样。而且,一段时间不用JNDI,我也忘得差不多了。
我使用的服务器是Tomcat,Tomcat自己是使用DBCP配置连接池的。为了方便起见,我想自己配置DBCP,俄如不是使用服务器的JNDI服务。这样的话,移植到任何服务器上都不用更改。
一个项目是Spring+Hibernate的,原来,我使用org.springframework.jdbc.datasource.DriverManagerDataSource这个SPring的简单数据源,它是不使用数据连接池的。实际使用中,我发觉数据库访问的速度有些慢。所以,我想使用DBCP作为数据源。
我改成这样:
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${jdbc.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc.url}</value>
</property>
<property name="username">
<value>${jdbc.username}</value>
</property>
<property name="password">
<value>${jdbc.password}</value>
</property>
</bean>
虽然系统能够启动,但是每次访问数据库时,都会抱错!
另一个项目是Struts+JDBC的。是直接使用DriverManager建立连接的。我也想改成DBCP,但是每次访问数据库都抱错。 因为得到的数据库连接总为空。
我不知道这样配置有什么不对。 希望各位高手能够帮忙。
服务器提供的JNDI连接池服务,如果是Tomcat提供的DBCP连接池实现的话,我看并没有太大的帮助。我们完全可以直接使用DBCP连接池。 自己实现数据源的单例模式。 这样的话,也省去了部署JNDI和获取JNDI数据源的麻烦!
请指教! 如果分不够,兄弟我可以再加! 反正我分多的是,决不食言!
问题点数:50、回复次数:5Top
1 楼shendl(良少)回复于 2006-03-04 14:46:57 得分 0
Spring那个项目中的出错信息是这样的:
Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring/applicationContext.xml]: Initialization of bean failed
在Struts+JDBC的项目中,我是直接用编程的方式创建数据源对象的,还是不行。
ds=new BasicDataSource();
ds.setDriverClassName("org.gjt.mm.mysql.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/wjmw?useUnicode=true&characterEncoding=GBK");
ds.setUsername("root");
ds.setPassword("");
ds.setMaxIdle(2);
ds.setMaxActive(4);
ds.setMaxWait(1000);Top
2 楼Saro(这也不是江水,这是二十年流不尽的英雄血。)回复于 2006-03-04 15:48:04 得分 50
用编程的方式创建BasicDataSource都不行的话,那就和程序,配置都没什么关系了。
换成最新的mysql驱动3.1.11和dbcp最新版试试,或者换台机器重装mysql。检查一下是否是防火墙的缘故。Top
3 楼shendl(良少)回复于 2006-03-05 00:22:42 得分 0
BasicDataSource在SPring+Hibernate+Oracle9i和Struts+JDBC+MySQL中都出现了问题。 MySQL中,报的是JDBC驱动不支持选定的事务隔离级别。
Oracle是SessionFactory未能正确的初始化。
MySQL,好像是因为MySQL不支持事务的缘故。
至于SPring之中,就搞不清楚了! 我紧紧修改了类名,增加了一个destroy方法而已。
现在,我自己写了一个DataSource,可以解决以上问题,但是很奇怪,为什么BasicDataSource会不行呢?Top
4 楼shendl(良少)回复于 2006-03-05 01:00:39 得分 0
靠,我自己写的DataSOurce,现在再测,又出现了错误:
java.sql.SQLException: Communication link failure: Bad handshake
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:659)
at com.mysql.jdbc.Connection.createNewIO(Connection.java:1562)
at com.mysql.jdbc.Connection.<init>(Connection.java:491)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:346)
at java.sql.DriverManager.getConnection(DriverManager.java:512)
这是怎么回事? 刚刚还是正确的呢!Top
5 楼shendl(良少)回复于 2006-03-05 11:18:45 得分 0
上面出错,是因为引入的包中,引入了一些解压的东西。去掉之后,就又恢复正常了!Top




