数据库连接池Data Source Pool的理解

1.数据库连接池允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个连接,避免了每个方法里new connection的耗费资源和时间。

2.数据库连接池是在项目启动时候初始化的,以方便程序运行时,随时可以调用这些已经被创建好的connection。只需要getConnection()就好。

connection的建立、断开都由连接池自身来管理。

3.创建connection是个很耗时的操作,所以建议在项目启动的时候去创建connection。避免在方法里需要connection时再去new一个connection是很耗费时间的。

4.数据库连接池,怎样归还connection?
Connection connection = pool.getConnection(); 
pool.release(connection);//归还资源

5.程序启动时候,是怎样初始化一个数据连接池的?

答:spring启动会自动ioc注入bean,相当于new已经配置好的连接池类。连接池类里面声明了static的list,用以装放connection。然后通过static代码块来将conection add进这个list。这样,整个list就在new bean的时候,在加载这个连接池类的时,就先创建好了。后期程序运行时候,那些connection就已经存在了。

connection的理解

1.jdbc connection就是一个连接数据库的TCP实例。

2.connection是个长连接的TCP。不像hTTP是个短连接的,每次都要3次握手才能建立。

3.connection长连接是提高了性能。不过还有一些细节的问题需要解决,即mysql发现一个链接长时间没有执行查询请求,就会自动断掉这个连接。

4.具体多长时间后断掉,有个timeout设置时间。通过sql:"show global variables like '%timeout';" 查看。

当链接已经失效了,仍然去执行查询操作,一个明显的表现形式就是提示:MySQL server has gone away

5.数据库连接池通过心跳机制,每间断一段时间发送空数据包来保持维护connection存活的。

6.长连接适用于要进行大量数据传输的情况,如:数据库,redis,memcached等要求快速,数据量大的情况下。

7.我们平常用的数据库连接都是长连接的,因为我们每次都是从数据库连接池中去拿connection的!!!db source里都是长连接!!

8.mysql默认的connection timeout时间是8小时。这个可以通过my.ini配置文件修改。

9.connection不是线程安全的!Connection不是线程安全的,它在多线程环境中使用时,会导致数据操作的错乱,特别是有事务的情况.connection.commit()方法就是提交事务,你 
可以想象,在多线程环境中,线程A开启了事务,然后线程B却意外的commit,这该是个多么纠结的情况.

10.多个线程同用一个connection会不会提高效率,减少多次连接的消耗?答:不会,因为connection里,每个方法都是synchronized,都执行了同步。所以并不会提高效率。
如:
public int executeUpdate(){ 
synchronized(connection){ 
//do 

}

11.菜鸟一般都是两种方法使用connection:1。要么就是只用一个connection,多个线程都用一个connection。2.要么就是每个方法里面创建一个connection,每次调用都创建

一个connection。
这两种都是效率低下的。
因为TCP链接的创建开支是昂贵的,当然DB server所能承载的TCP并发连接数也是有限制的.因此每次调用都创建一个Connection,这是不现实的;所以才有了数据库连接池的出现.

创建一个数据库连接池:

public class SimplePoolDemo {//创建一个连接池private static LinkedList<Connection> pool = new LinkedList<Connection>(); //初始化10个连接static{try {for (int i = 0; i < 10; i++) {Connection conn = DBUtils.getConnection();//得到一个连接
                pool.add(conn);}} catch (Exception e) {throw new ExceptionInInitializerError("数据库连接失败,请检查配置");}}//从池中获取一个连接public static Connection getConnectionFromPool(){return pool.removeFirst();//移除一个连接对象
    }//释放资源public static void release(Connection conn){pool.addLast(conn);}
}

数据库连接池和connection的理解相关推荐

  1. java数据库连接Druidsql失败_Druid数据库连接池异常connection holder is null

    Druid数据库连接池异常connection holder is null 具体如下:### Error updating database.  Cause: java.sql.SQLExcepti ...

  2. .Net与Oracle地数据库连接池(Connection Pool)

    .Net与Oracle的数据库连接池(Connection Pool) 概述: 数据库连接池允许应用程序重用已存在于池中的数据库连接,以避免反复的建立新的数据库连接.这种技术能有效提高应用程序的伸缩性 ...

  3. 数据库连接池的作用及理解

    初识为什么要用连接池: 对于一个简单的数据库引用,用于对数据库的访问不是很频繁,这种情况可以简单的在需要访问数据库时,创建一个链接,用完关闭它,这样做不会有太明显的性能上的开销.但是对于复杂的数据库引 ...

  4. Java中几个主流的数据库连接池

    池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销.这里所说的池是一种广义上的池,比如数据库连接池.线程池.内存池.对象池等.其中,对象池可以看成保存对 ...

  5. javaweb使用 数据库连接池 DBCP,实现对数据库驱动使用优化,多个 action共用一个数据库连接

    本文着重理解DBCP以及连接池基本运行原理(步骤) 首先我们要知道在连接数据库时 如果频繁的对数据库进行连接,然后又将它释放,对项目的访问效率是一种绝对的降低, 因为在这个过程中,连接(校验密码用户名 ...

  6. 数据库连接池的作用及c3p0的详解(转载他人的--合理掌握学习方式)

    ----转载 1.JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库 ...

  7. java:数据库连接池

    一.什么是数据库连接池? 官方:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放. 个人理 ...

  8. 【DataBase】数据库连接池

    本文为网上两篇博客内容的结合以及自己的一些理解: 参考博客一:MySql数据库连接池专题 参考博客二:JDBC之数据库连接池 文章目录 一.什么是数据库连接池 二.传统的连接机制与数据库连接池的运行机 ...

  9. 数据库连接池的作用及c3p0的详解

    1.JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库连接. 这种模 ...

最新文章

  1. verilog always语法_Verilog初级教程(20)Verilog中的`ifdef 条件编译语句
  2. IOS开发之──传感器使用
  3. VTK:可视化之Visualize2DPoints
  4. 解决burpsuite无法对DVWA环境(本地环境)进行抓包
  5. My FioriTest navigation from master page to detail page
  6. C#.NET SQLServer数据库分页函数,包含存储过程和C#代码
  7. FCN全卷积网络随笔
  8. Nginx + PHP(php-fpm)遇到的502 Bad Gateway错误
  9. 电脑没网络设备dns服务器没检测到响应,设备或资源dns没检测到有响应 网络无法连接...
  10. 聊天系统服务器端类图怎么画,聊天系统服务器端类图
  11. makefile工作笔记0003---Makefile的ifeq逻辑或,逻辑与的变通实现
  12. Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP
  13. 和我一起打造个简单搜索之ElasticSearch入门
  14. U-Boot下的I2C设备的读写
  15. 失业日记 9月30日
  16. Spring框架基础(上)
  17. iOS 开发值得拥有的75 个工具
  18. 【cocos creater】5.仿《弓箭传说》- 创建虚拟遥感
  19. 通讯录的实现(C语言)
  20. Win 2003 IE 增强的安全配置应该如何关闭

热门文章

  1. 【bzoj4566】[Haoi2016]找相同字符【后缀自动机】
  2. [转]locate命令的使用
  3. 【.NET深呼吸】基础:自定义类型转换
  4. C语言入门(4)——常量、变量与赋值
  5. mysql 数学函数
  6. winform的UI设计关键属性汇总
  7. androidstudio环境配置常见问题解决
  8. C# Winform 出现异常:无法将顶级控件添加到控件,解决方案如下:
  9. ToolStrip和ToolStripButton的用法
  10. IOS应用管理学习,进阶,涉及字典转模型,工厂方法,面向对象思想,页面布局等