发表于: 2017-11-04 23:01:15

1 849


今天完成的事情:

1. 测试一下不关闭连接池的时候,在Main函数里写1000个循环调用会出现什么情况。

   连接池的概念: 就是为数据库连接创建的一个缓冲池,当你需要连接数据库的时候就从缓冲池把连接取出来用,用完放回去就好。

   为什么要创建连接池:为了降低访问数据库消耗的时间,提高项目性能。

   下面详细说一下为什么可以降低访问数据库消耗的时间。(参考http://blog.csdn.net/sinat_29384657/article/details/52911471

   当我们创建一个数据库连接时,看看它底层都干了些什么:

   1. .“DriverManager”检查并注册驱动程序;

   2. “com.mysql.jdbc.Driver”就是我们注册了的驱动程序,它会在驱动程序类中调用“connect(url…)”方法。

   3. com.mysql.jdbc.Driver的connect方法根据我们请求的“connUrl”,创建一个“Socket连接”,连接到IP为“your.database.domain”,默认端口3306的数据库。

   4. 创建的Socket连接将被用来查询我们指定的数据库,并最终让程序返回得到一个结果

   简单的获取一个连接,系统却要在背后做很多消耗资源的事情,大多时候,创建连接的时间比执行sql语句的时间还要长。

下面就为我们之前写的Spring程序加一个数据库连接池:

通过比较c3p0dbcpproxool,最后决定选择c3p0,综合性能较强。

a. 在pom中添加c3p0依赖的jar包

<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>

b. 修改applicationContext.xml中的dataSource bean配置

   c. 配置好了之后,咱们在main函数中写1000个循环调用。

    

运行结果:


发现原来是配置DataSource时候的类忘记改成c3p0的类了,还有属性名driverclassname和username变了,修改成com.mchange.v2.c3p0.ComboPooledDataSource再次运行:

发现程序跟数据库总共创建了10个连接(刚好就是初始化数据库连接池里面的连接数),后面就一直顺利输出了。


明天计划的事情:完成

  • 26.测试一下连接DB中断后TryCatch是否能正常处理。
  • 27.检查一下自己的代码是否符合规范,如果DB的表格有改动,应该改哪些内容,需要多久。
  • 28.数据库里插入100万条数据,对比建索引和不建索引的效率查别。再插入3000万条数据,然后是2亿条,别说话,用心去感受数据库的性能。
  • 29.将自己的收获和经验总结,写在日报里,标明是任务小结,写的好的话,可能会被采纳当成任务攻略。

遇到的问题: 忽略了C3P0的datasource的类名和属性名与之前的Spring Template不同导致配置出错

                     把配置修改过来就OK了

                    为什么数据库连接池中连接的个数不是最大连接数,而是初始化连接的个数呢?


收获: 学会了数据库连接池的用法和配置



  


返回列表 返回列表
评论

    分享到