发表于: 2017-11-04 23:01:15
1 848
今天完成的事情:
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程序加一个数据库连接池:
通过比较c3p0、dbcp、proxool,最后决定选择c3p0,综合性能较强。
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了
为什么数据库连接池中连接的个数不是最大连接数,而是初始化连接的个数呢?
收获: 学会了数据库连接池的用法和配置
评论