【Java进阶】——初识数据库连接池
【简介】
数据库连接池:程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的链接进行申请,使用,释放。
相比之前的程序连接,减少了数据库的打开关闭次数,从而减少了程序响应的时间。在需要数据库连接的时候直接在数据库连接池中拿取数据连接,进行操作,等使用完成之后将资源放回到数据连接池中,等待下个任务的使用。
【原理】
早期:
数据库连接”是一种稀缺的资源,为了保障网站的正常使用,应该对其进行妥善管理。其实我们查询完数据库后,如果不关闭连接,而是暂时存放起来,当别人使用时,把这个连接给他们使用。就避免了一次建立数据库连接和断开的操作时间消耗。
连接池
【代码】
关于数据库连接池有很多种,小编初步使用的是 Apachecommons-dbcp 连接池。小编封装了一个数据库连接池的工具类,在程序中解决数据库连接资源的问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | /** * @Title: JDBCUtils.java * @Package cn.itcast.gjp.tools * @Description: 获取数据库连接的工具类 实现连接 * @author 贾文静 * @date Apr 5, 2017 4:52:57 PM * @version V1.0 * Update Logs: * **************************************************** * Name: * Date: * Description: ****************************************************** */ package cn.itcast.gjp.tools; import javax.sql.DataSource; import org.apache.commons.dbcp.BasicDataSource; /** * @ClassName: JDBCUtils * @Description: 获取数据库连接的工具类 实现连接池,dbcp连接池 * @author 贾文静 * @date Apr 5, 2017 4:52:57 PM * */ public class JDBCUtils { // 创建BasicDataSource对象 private static BasicDataSource datasource = new BasicDataSource(); // 静态代码块,实现必要参数设置 static { //要使用的JDBC驱动程序的完全限定的Java类名称 datasource.setDriverClassName( "com.mysql.jdbc.Driver" ); //要传递给我们的JDBC驱动程序以建立连接的连接URL datasource.setUrl( "jdbc:mysql://localhost:3306/gjp" ); //要传递给我们的JDBC驱动程序以建立连接的连接用户名 datasource.setUsername( "root" ); //要传递给我们的JDBC驱动程序以建立连接的连接密码 datasource.setPassword( "123" ); //设置可以同时分配的活动连接的最大数量 datasource.setMaxActive( 10 ); //设置池中可重新连接空闲的最大连接数 datasource.setMaxIdle( 5 ); //设置池中空闲连接的最小数量 datasource.setMinIdle( 2 ); //设置连接池的初始大小 datasource.setInitialSize( 10 ); } public static DataSource getDataSource() { return datasource; } } |
其实这个部分可以放到配置文件中,因为其中有数据库的一些内容,为了灵活性,还是建议放到配置文件中。
【问题】
其实使用数据库连接池也会带来一定的问题。
1、并发问题
2、多数据库服务器和多用户
3、事务处理
4、连接池的分配与释放
5、连接池的配置和维护
【总结】
如何利用连接池达到优化程序的目的,减少其所带来的负面影响,还是需要不断提高自己技能来达到。PS:其实连接池也是设计模式中享元模式的一种应用方式。