精华内容
下载资源
问答
  • ...一般来讲,Java数据库连接池的选择,两个选择,一是使用现有的开源组件,二是自己动手开发。   使用现有的开源组件,很多可选择:     Proxool BoneCP DBCP Druid C3P0 ...

     

    数据库连接池是一个牵涉面很广的话题,对于大型系统,数据库连接池的好坏,关系到系统的性能和稳定性,因此,选好数据库连接池,是系统在架构时期的一个重要任务。

     

    一般来讲,Java数据库连接池的选择,有两个选择,一是使用现有的开源组件,二是自己动手开发。

     

    使用现有的开源组件,有很多可选择:

     

     

    Proxool

    BoneCP

    DBCP

    Druid

    C3P0

     

    从看到网上的介绍来看,BoneCP非常不错,最新的开源数据库连接池组件中,淘宝的Druid也还很吸引人。值得一试。

     

    自己开发就是很麻烦的事情了,要有很好的设计和编码实现,还要经过很严格、长时间的测试,但是自己实现也有好处,就是:

    (1)只需要实现自己需要的部分即可,无需额外的设计和编码(开源组件都有很多其实你用不上的东西,一时半会儿还剔除不掉)

    (2)可以逐步成长,逐步改善设计和实现,逐步增加功能和非功能特性,有计划的完善

    (3)有了bug和新的需求不用求助社区,因为社区不是为某一个开发者服务的,你所需的特性人家不一定会愿意加进去

     

     

    那么要从开源的连接池组件中选择一款来在产品中使用,需要从哪些方面考虑呢?(如果是自己开发,那么需要设计实现时考虑这些特性)。记着前一阵子发过一篇关于软件质量特性的文章,其实这里也就是这个思想的具体发挥。

     

    (1)形态方面

    (1.1)依赖

              是否有依赖的JAR包?依赖包是数据库连接池组件自己的,还是第三方的?

              在选择上,不依赖第三方包肯定更好,没有任何依赖包,只依赖Java自身最好

               这样在系统和产品中使用就简单得多。

    (1.2)环境要求

            对Java版本的要求,能兼容更多Java版本肯定好,当然,如果你所开发的产品通用性方面要求少,那么能支持你产品使用的Java版本也可以。

     

          一般来讲,能支持Java1.5/1.6/1.7最好。JDK1.4太古老了也就罢了。

     (1.3)纯粹性

           数据库连接池就只是完成简单的功能,最好不要附带其它的东西,其它东西需要可以单独找。

     

    (2)配置

     (1.1)可配置

             都有哪些特性可以配置?一般来讲,必须的特性是数据库JDBC URL、用户名、(Schema)、访问口令、最小空闲连接数、最大连接数;

     

    (3)获取连接的功能要求

    (3.1)正常状况下获取连接当然是基本功能,问题是在出错了(例如数据库突然断开了)的状况下的处理,有几种典型情况:

    1、数据库里没有池化的连接,此时数据库访问失败(例如网络故障、数据库服务器宕机),怎样处理的?

    2、数据库里有一些池化的连接,此时数据库访问失败(例如网络故障、数据库服务器宕机),又是如何处理的?这个很关键。是否检查了那些池化连接的可用性?

    3、数据库里有一些池化连接,但是5分钟之前数据库服务器宕机,现在数据库服务器已经完全恢复,此时又是如何处理的?

     

    (3.2)连接分配的策略

           没有到达最大连接数之前,有连接请求,直接分配新的连接,是基本功能。那么,当已经到达最大连接数,若干个连接请求,都在等待其他请求完成业务释放连接的情况下,最先释放的那个连接怎么分配?先给哪个请求者?(抢占式?先到先得?还是有策略?)

     

    (3.3)等待连接等了很久,也没有工作线程释放连接,此时又是如何处理的?

     

    (4)连接使用中的问题

    (4.1)事务的处理

          使用连接池,经常会发生的一个问题是在一个连接上设置了事务自动提交的状态为FALSE,但是代码里忘记Commit或RollBack,将连接回池,下一个得到连接的请求,处理上会受到影响,连接池有无妥善处理这个问题,也考量了实现者考量问题是否完备。

     

       这里是完全依靠上层开发者不犯错误,还是连接池有统一的处理就非常关键。

     

    (4.2)连接长时间不返回的处理

     

           在连接上执行一个SQL,很长时间不返回(大概是数据库服务器出错了,死锁了等等),外边等待连接的线程等不到释放,连接池已达到最大连接数,此时怎么处理?此处关系到系统健壮性,又应该如何处理?

     

    (4.3)statement缓存功能

     

         数据库连接池本身解决了每次创建连接的效率问题,提高了系统数据库访问的效率,但是每次创建statement也是要消耗性能的,所以,如果系统使用SQL比较固定,可以选择采用Statement缓存,因此,要考虑Statement缓存是否支持。

     

        Statement有可能带来内存问题,因此,除了考虑这个功能特性是否能支持,还需要考虑,在这个特性的使用者,内存是否会出现问题。

     

    (5)关闭

    (5.1)close的处理

     

           使用close来将连接回池是通用要求,没有争议。但是一定要弄清楚的是,好的连接回池,坏的连接真正关闭和抛弃,否则,坏的连接进入池子,将来又引起麻烦。

     

    (5.2)对池中已经建好的连接,是否长期不使用的情况下,可以回收以节省系统资源

     

     (6)监控和日志

    (6.1)状态监控

     

         一般来讲,系统部署完毕,都要对数据库连接池做出初始的配置,包括最大连接数、最小空闲连接等等,但是使人困惑的是,配置多少好呢?很多系统对此都没有任何说法,让部署系统的人跟着感觉走,凭经验来。对一般系统,当然也无所谓,但是对某些关键系统就非常麻烦,配置的不合理,系统又不能重启,效率很差,客户抱怨,投诉电话被打爆,怎么办?

     

        这里就体现了数据库连接池设计者和架构师的经验和水平。一般来讲,分为两个层次解决这个问题,一是连接池可以非常简单的监控池的运行状况,看看连接数是否够用,是否常常用光了所有的连接,在等待其他工作线程释放(如果有这种情况,解决的话,可能不仅仅是连接池的问题,还要配合DBA查数据库的问题),因此,连接池组件本身是否提供了一种或几种监控的方式,是一个重要的考察点。比如详细的日志、JMX、SNMP等等。

     (6.2)动态调整

       如上文所说,发现连接池的配置不是很合适(或不够用),需要调整,但是不允许随便重新启动系统,那么,是否有别的方法?例如通过JMX或SNMP?

     

    (7)实际测试

    上面这些特性考虑好之后,就是模拟系统实际运行的场景来进行实际的测试了,这里需要提到的是,一些开源组件做得比较好,提供了一些性能测试的测试结果,但是如果要在系统或产品里使用,需要进行更多更细致的测试,性能效率是一个方面,稳定性(有无泄漏,有无出错)是更关键的。

     

     

    上面考虑的是外部特性,下面说一下其它特性

     

    (1)是否有足够的文档?

    (2)代码是否清晰易懂,将来出现问题是否能够自己动手修改

    (3)开源组织是否活跃,是否能够不断完善改进

    (4)复杂度。一般组件在完成要求的情况下,都是越简单越好,复杂度越高,维护改进越麻烦

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • Java数据库连接池比较及使用场景

    千次阅读 2016-05-21 13:48:38
    我们在连接数据库的时候,由于创建数据库连接代价很大...下面我们介绍Java中常用的数据库连接池,主要介绍的内容以下几点: 1. 优点及不足 2. 如何使用 3. 在哪些库或者框架中被使用。常用的五种数据库连接池 T

    我们在连接数据库的时候,由于创建数据库连接代价很大(销毁连接的代价也很大),需要消耗很多资源,因此引入数据库连接池。数据库连接池是一种池化技术,预先创建好数据库连接,保存在内存中,当需要连接时,从中取出即可,使用完后放回连接池。

    下面我们介绍Java中常用的数据库连接池,主要介绍的内容有以下几点:
    1. 优点及不足
    2. 如何使用
    3. 在哪些库或者框架中被使用。

    常用的五种数据库连接池

    1. Tomcat jdbc pool
    2. C3P0
    3. HikariCP
    4. DBCP
    5. DBCP2

    Tomcat jdbc pool

    优点:

    1. 高性能
    2. 并发支持好
    3. Tomcat jdbc pool implements the ability retrieve a connection asynchronously, without adding additional threads to the library itself.
    4. Tomcat jdbc pool is a Tomcat module, it depends on Tomcat JULI, a simplified logging framework used in Tomcat.

    如何使用

    DBCP

    不足:
    Commons DBCP 1.x is single threaded. In order to be thread safe Commons locks the entire pool for short periods during both object allocation and object return. Note that this does not apply to Commons DBCP 2.x.
    Commons DBCP 1.x can be slow. As the number of logical CPUs grows and the number of concurrent threads attempting to borrow or return objects increases, the performance suffers. For highly concurrent systems the impact can be significant. Note that this does not apply to Commons DBCP 2.x.
    Commons DBCP is over 60 classes. tomcat-jdbc-pool core is 8 classes, hence modifications for future requirement will require much less changes. This is all you need to run the connection pool itself, the rest is gravy.
    Commons DBCP uses static interfaces. This means you have to use the right version for a given JRE version or you may see NoSuchMethodException exceptions.
    It’s not worth rewriting over 60 classes, when a connection pool can be accomplished with a much simpler implementation.

    展开全文
  • 跟汤老师学Java笔记:数据库连接池简介 完成:第一遍 1.传统获取数据库连接的方式存在哪些问题? 问题一:每一次获取连接都需要向数据库发送请求建立连接,非常耗时,效率很低 问题二:每一次访问结束后会断开与...

    1.数据库连接池简介:传统获取数据库连接的方式存在哪些问题???2.连接池技术的原理是什么???常用的连接池技术有哪些???

    学习:第7遍


    1.传统获取数据库连接的方式存在哪些问题???

    问题一:每一次获取连接都需要向数据库发送请求建立连接,非常耗时,效率很低

    问题二:每一次访问结束后会断开与数据库的连接,下次访问需要重新建立连接,耗时效率低

    问题三:当并发访问量较大时,网站性能会受到很大的影响。

    问题四:安全性和稳定性相对较差


    2.连接池技术的原理是什么???

    原理:
    创建一个连接池pool:在该连接池创建时,会先向数据库申请建立多个连接(即初始连接数)

    当用户需要连接时:可以直接从连接池中获取即可

    当访问结束后:会将连接归还给连接池,可以被其他用户重复使用


    3.常用的连接池技术有哪些???

    一般使用第三方连接池技术:
    开源的数据库连接池:

    dbcp(Apache是运作开源项目的非盈利性组织,免费,
    全称Database Connection Pool,也称为commons-dbcp)

    druid(阿里巴巴开发的开源项目,俗称德鲁伊)

    C3P0(已经没落了)

    展开全文
  • 数据库连接池

    2019-04-07 15:58:00
    数据库连接池: 为什么要使用数据库连接池,其原因可以总结为以下几点? ...常见的数据库连接池有哪些?区别? DBCP:apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件 BoneCP...

    数据库连接池:

    为什么要使用数据库连接池,其原因可以总结为以下几点?
    • 减少频繁创建和销毁数据库连接的开销
    • 统一管理创建数量、连接时间,提高系统稳定
    常见的数据库连接池有哪些?区别?
    • DBCP:apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件
    • BoneCP:2013年前最快的
    • C3P0:太古老,代码及其复杂,不利于维护。貌似都比它强
    • Druid:阿里巴巴出品,速度第二快,功能比较全面,且扩展性较好,比较方便对jdbc接口进行监控跟踪等
    • HikariCP:现在最快最稳定

    转载于:https://my.oschina.net/u/3129674/blog/3033224

    展开全文
  • Java学习--Ajax与数据库连接池 概述 数据库连接池 Ajax简介 JavaScript实现Ajax jQuery实现Ajax 一:数据库连接池 数据库连接是一种关键的有限的昂贵的资源,...常见的数据库连接池有哪些: C3p0、DBCP、 Tomcat J...
  • SpringBoot切换数据库连接池

    千次阅读 2017-08-12 03:28:10
    数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库...数据库连接池有哪些? DBCP(DBCP(DataBase Connection Pool)数据库连接池,是java数据库连接池的一种,由Apache开发,通过
  • 1.JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具...
  • Tomcat关闭不了数据库连接池

    千次阅读 2010-04-24 16:24:00
    前面在一个项目的开发中,用的是tomcat的那个数据库连接池. 但在关闭tomcat后,哪些打开的连接还继续保持在哪里.并没有被关闭掉. 用ps -aux命令查看后,发现每个连接都一个java进程.   仔细一想感觉是代码的问题...
  •  Java Data BaseConnectivity,java数据库连接,在需要存储一些数据,或者拿到一些数据的时候,就需要往数据库里存取数据。那么java如何连接数据库呢?需要哪些步骤? 1.1、注册驱动  1)什么是驱动  驱动...
  • JDBC的RowSet是什么,有哪些不同的RowSet?RowSet用于存储查询的数据结果,和ResultSet相比,它更具灵活性。RowSet继承自ResultSet,因此ResultSet能干的,它们也能,而ResultSet做不到的,它们还是可以。RowSet接口...
  • java数据库面试题

    2021-02-15 17:14:11
    Mysql 1. 什么是mysql 2. 存储引擎 3. 字符集及校队规则 ...什么是数据库连接池?为什么需要数据库连接池? 13. 分库分表后,id 主键如何处理? 14. 一条sql 语句在mysql 中如何执行 15. Mysql 高性能优化规范建议 16
  • 作者:cing_self来源:SegmentFault 思否社区JDBC存在的问题代码的冗余:在对...只需要些SQL语句---这一部分的封装下一篇文章描述性能问题:每一次对数据库的操作都要建立连接,操作完之后又要释放连接,如果数据...
  • Java Data Base Connectivity,java数据库连接,在需要存储一些数据,或者拿到一些数据的时候,就需要往数据库里存取数据,那么java如何连接数据库呢?需要哪些步骤?1、注册驱动什么是驱动?驱动就是JDBC实现类,...
  • java数据库常见面试题目

    千次阅读 2018-03-10 23:45:28
    介绍一下数据库有哪些优化的方法?讲你自己知道的为什么事务可以优化数据库?Mysql的数据库引擎,区别特点数据连接池采用了什么设计模式?意义是什么?项目用到什么数据库?隔离级别?每个隔离级别各做了什么数据库...
  • 在许许多多的B/S架构系统中都涉及到了数据库的链接,那么对于数据库连接的方式有哪些?可能出现的问题是什么? 目录 1.普通连接方式 2.单例模式 3.连接池 分析 普通连接: 下面是我们一般使用的普通连接...
  • 跟汤老师学Java笔记:连接池的用法 完成:第一遍 ...第一步:创建数据库连接池(数据源) BasicDataSource ds = new BasicDataSource(); 第二步:设置连接池的属性(参数)的常用方法有哪些? ds.s
  • 池化技术相比大家已经屡见不鲜了,线程池、数据库连接池、Http 连接池等等都是对这个思想的应用。池化技术的思想主要是为了减少每次获取资源的消耗,提高对资源的利用率。 线程池提供了一种限制和管理资源(包括执行...
  • 数据库连接池介绍下,底层实现说下 hashset底层实现,hashmap的put操作过程 说说HaspMap底层原理?再说说它跟HaspTable和ConcurrentHashMap他们之间的相同点和不同点? 说说B+树和B树的区别,优缺点等? ...
  • 数据库连接池介绍下,底层实现说下 hashset底层实现,hashmap的put操作过程 说说HaspMap底层原理?再说说它跟HaspTable和ConcurrentHashMap他们之间的相同点和不同点? 说说B+树和B树的区别,优缺点等? 算法题...
  • 数据库连接池介绍下,底层实现说下 hashset底层实现,hashmap的put操作过程 说说HaspMap底层原理?再说说它跟HaspTable和ConcurrentHashMap他们之间的相同点和不同点? 说说B+树和B树的区别,优缺点等? 算法题,对....
  • 5、检查数据库连接是否满了 6、检查磁盘是否满了 7、如果多节点,某个节点问题,则对比两个环境的环境变量,比如JDK配置信息环境等 8、检查连接池是否满了 9、环境变量是否引用,环境变量的完整路径 10、主...
  • 1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。 解决:在mybatis-config.xml中配置数据链接池,使用连接池管理数据库连接。 2、Sql语句写在代码中造成代码不易...
  • 跟汤老师学Java笔记:练习:改写学生管理系统 完成:第一遍 1.学生相关的主要功能有哪些?...使用druid连接池,部署druid.jar包 (2).使用实体类即Bean类或Entity类 entity:实体类对应数据库中的表,类的属性对应

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 184
精华内容 73
关键字:

java数据库连接池有哪些

java 订阅