数据库连接池分析.docx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库连接池分析?这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及当下最流行的开源数据库连接池jar包。一.早期我们怎么进行数据库操作 1.原理:一般来说,java应用程序访问数据库的过程是:? ①装载数据库驱动程序;? ②通过jdbc建立数据库连接;? ③访问数据库,执行sql语句;? ④断开数据库连接。 2.代码? //?查询所有用户[java]?/shuaihj/article/detailsiew plain/shuaihj/article/detailsopy/shuaihj/article/detailsrint/shuaihj/article/detailsPublic?void?FindAllUsers(){???//1、装载sqlserver驱动对象??DriverManager.registerDriver(new?SQLServerDriver());?//2、通过JDBC建立数据库连接??Connection?con?=DriverManager.getConnection(jdbc:sqlserver://:1433;DatabaseName=customer,?sa,?123);?//3、创建状态??Statement?state?=con.createStatement();?//4、查询数据库并返回结果??ResultSet?result?=state.executeQuery(select?*?from?users);?//5、输出查询结果??while(result.next()){???System.out.println(result.getString(email));???}?//6、断开数据库连接??result.close();???state.close();???con.close();???}??3.分析?程序开发过程中,存在很多问题:首先,每一次web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。?上述的用户查询案例,如果同时有1000人访问,就会不断的有数据库连接、断开操作:??通过上面的分析,我们可以看出来,“数据库连接”是一种稀缺的资源,为了保障网站的正常使用,应该对其进行妥善管理。其实我们查询完数据库后,如果不关闭连接,而是暂时存放起来,当别人使用时,把这个连接给他们使用。就避免了一次建立数据库连接和断开的操作时间消耗。原理如下:二.技术演进出来的数据库连接池?由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。我们知道,对于共享资源,有一个很著名的设计模式:资源池(resource pool)。该模式正是为了解决资源的频繁分配﹑释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。?我们自己尝试开发一个连接池,来为上面的查询业务提供数据库连接服务:①?编写class?实现DataSource?接口②?在class构造器一次性创建10个连接,将连接保存LinkedList中③?实现getConnection?从?LinkedList中返回一个连接④?提供将连接放回连接池中方法?1、连接池代码?[java]?/shuaihj/article/detailsiew plain/shuaihj/article/detailsopy/shuaihj/article/detailsrint/shuaihj/article

文档评论(0)

gangshou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档