设为首页 收藏本站
查看: 560|回复: 0

[经验分享] 【原创】spring DriverManagerDataSource与apache BasicDataSource

[复制链接]

尚未签到

发表于 2017-1-7 09:49:09 | 显示全部楼层 |阅读模式
情况是这样的。。。
2008-3-18 1:08:26 org.apache.tomcat.util.threads.ThreadPool logFull
严重: All threads (150) are currently busy, waiting. Increase maxThreads (150) or check the servlet status
重新启动服务器之后,问题依然存在。
分析得出以下可能情况
1.连接数达到了150的最大上限
2.服务器端响应用户请求的时间过长导致
3.连接池的配置数出了问题
分析:
1.1个用户访问是OK的,当用2个用户对localhost进行访问,所以根本不可能达到并发访问线程的150的上限,所以应该不是数据库的原因,排除了第一种可能
2.之前访问的JSP已经经过多次访问,所以不可能是第一次访问编译,运行而导致的请求时间过长的原因,第二情况也否定。
到此,经过分析可以确定的是连接池出了问题...
首先有2个知识点需要再弄的更清楚一些
DriverManager与DataSource  连接数据库有何区别?
        DriverManager传统的jdbc连接,通过Class.forName("XXX"),的办法注册之后,就可以DriverManager.getConnection()获得连接了。
        DataSource是建立在JNDI服务基础上的,需要application server配置datasource.首先需要注册一个DataSource(一般在/META-INF/context.xml下)然后在web.xml文件中引用这个DataSource,就可以DataSource.getConnection()获得连接,具体操作参考(tomcat目录里的JNDI Resources小节)
DataSource 与 DBCP pool(连接池) 的区别?
        J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。
相当于是优化了DataSource的一种工具
跟数据库连接的部分是通过Spring的DataSource JDBC连接的,配置的XML内容如下:
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<!--PropertyPlaceholderConfigurer类来读取xxx.properties配置文件信息,以key和value的形式-->
<property name="locations">
<list>
<value>
/WEB-INF/classes/config/pkm/environment/jdbc.properties
</value>
<value>
<!--多个xxx.properties文件-->
</value>
</list>
</property>
</bean>
<!--事实上是因为DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用-->
<!--两种不同的DataSource-->
<!--单纯的DataSource-->
<bean id="pkmDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>${pkm.jdbc.driverClassName}</value>
<!--${pkm.jdbc.driverClassName}是jdbc.properties文件 中的key-->
</property>
<property name="url">
<value>${pkm.jdbc.url}</value>
</property>
<property name="username">
<value>${pkm.jdbc.username}</value>
</property>
<property name="password">
<value>${pkm.jdbc.password}</value>
</property>
</bean>
<!--连接池-->
<bean id="pkmDataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" lazy-init="false">
<property name="driverClassName" value="${pkm.jdbc.driverClassName}"/>
<property name="url" value="${pkm.jdbc.url}"/>
<property name="username" value="${pkm.jdbc.username}"/>
<property name="password" value="${pkm.jdbc.password}"/>
<property name="initialSize" value="5"/>
<property name="maxActive" value="10"/>
<property name="maxWait" value="60000"/>
<property name="poolPreparedStatements" value="true"/>  
</bean>

        所以问题就出在这里,当使用BasicDataSource后问题不在出现,所以是连接数量造成的,在访问数量大,并发的情况下,毫无疑问是要选择连接池的,因为有连接池的功能,无论是效率还是在资源利用率上都优于DriverManagerDataSource
        从而从根本上了解了spring的DriverManagerDataSource与apacheBasicDataSource之间的区别.
有时候可能需要配置Jndi服务
<bean id="pkmDataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="pkmDataSource"/>
</bean>
<!--
这样的话部署的时候,需要在容器中(tomcat,weblogic)配置JDBC Connection Pool(DBCP)连接池
-->


这三种连接方式常常使用,也容易混淆,选择其中的某一种,就需要看具体环境来配置了。
PS:jdbc.properties文件中的配置如下
pkm.jdbc.driverClassName=oracle.jdbc.OracleDriver
pkm.jdbc.url=jdbc\:oracle\:thin\:@109.52.20.31\:1521\:orcl<!--把符号做转译-->
pkm.jdbc.name=pkmuser
pkm.jdbc.password=dbl0gin
pkm.jdbc.dataSource=pkmDataSource

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-324964-1-1.html 上篇帖子: JAVA XML http://xml.apache.org/dist 下篇帖子: mahout分析(1) org.apache.mahout.matrix
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表