精华内容
下载资源
问答
  • java编写的数据库连接池源码及调用示例源码,jdbcPool是连接池源码,jdbcPoolTest是调用示例源码。
  • 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏
  • 主要介绍了Java数据库连接池的几种配置方法(以MySQL数据库为例) 的相关资料,需要的朋友可以参考下
  • 连接池类是对某一数据库所有连接的“缓冲池”,主要实现以下功能:从连接池获取或创建可用连接;使用完毕之后,把连接返还给连接池;在系统关闭前,断开所有连接并释放连接占用的系统资源;还能够处理无效连接(原来...
  • JAVA 使用数据库连接池连接Oracle数据库,全代码,附加详细说明
  • java数据库连接池

    2018-06-28 00:10:46
    数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接, 当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。 我们可以通过设定连接池最大连接数...
  • java手写数据库连接池

    2017-11-02 17:32:20
    java手写数据库连接池,使用maven构建,一共四个类方法,一个是测试类,测试类使用三个线程去操数据库连接
  • 一个简单的java项目,eclipse直接导入,里面demo可以直接运行连接数据库运行操作
  • 主要介绍了基于java实现mongodb的数据库连接池Java通过使用mongo-2.7.3.jar包实现mongodb连接池,感兴趣的小伙伴们可以参考一下
  • java中几个主流的数据库连接池

    万次阅读 多人点赞 2018-08-12 19:12:03
    这里所说的池是一种广义上的池,比如数据库连接池、线程池、内存池、对象池等。其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,用完后并不直接释放掉...

    池(Pool)技术在一定程度上可以明显优化服务器应用程序的性能,提高程序执行效率和降低系统资源开销。这里所说的池是一种广义上的池,比如数据库连接池、线程池、内存池、对象池等。其中,对象池可以看成保存对象的容器,在进程初始化时创建一定数量的对象。需要时直接从池中取出一个空闲对象,用完后并不直接释放掉对象,而是再放到对象池中以方便下一次对象请求可以直接复用。其他几种池的设计思想也是如此,池技术的优势是,可以消除对象创建所带来的延迟,从而提高系统的性能。

    要了解Java连接池我们先要了解数据库连接池(connection pool)的原理,Java连接池正是数据库连接池在Java上的应用。——我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。

    该模式正是为了解决资源的频繁分配﹑释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。

     

    C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。(主页:http://sourceforge.net/projects/c3p0/)

     

    BoneCP 是一个开源的快速的 JDBC 连接池。BoneCP很小,只有四十几K(运行时需要log4j和Google Collections的支持,这二者加起来就不小了),而相比之下 C3P0 要六百多K。另外个人觉得 BoneCP 有个缺点是,JDBC驱动的加载是在连接池之外的,这样在一些应用服务器的配置上就不够灵活。当然,体积小并不是 BoneCP 优秀的原因,BoneCP 到底有什么突出的地方呢,请看看性能测试报告。(主页:http://jolbox.com/)

     

    DBCP (Database Connection Pool)是一个依赖Jakarta commons-pool对象池机制的数据库连接池,Tomcat的数据源使用的就是DBCP。目前 DBCP 有两个版本分别是 1.3 和 1.4。1.3 版本对应的是 JDK 1.4-1.5 和 JDBC 3,而1.4 版本对应 JDK 1.6 和 JDBC 4。因此在选择版本的时候要看看你用的是什么 JDK 版本了,功能上倒是没有什么区别。(主页:http://commons.apache.org/dbcp/)

     

    Proxool是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中。完全可配置。快速,成熟,健壮。可以透明地为你现存的JDBC驱动程序增加连接池功能。

     

     

    数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

    Java中常用的数据库连接池有:DBCP 、C3P0、BoneCP、Proxool、DDConnectionBroker、DBPool、XAPool、Primrose、SmartPool、MiniConnectionPoolManager及Druid等。

    Java开源数据连接池: http://www.open-open.com/20.htm

    Hibernate常用三种连接池的配置:http://tieba.baidu.com/f?kz=70604644

     

    几种常用java连接池:http://hi.baidu.com/tangyudee/blog/item/f8bdb43decca892571cf6ced.html

    感觉在介绍之前有必要阐述一下连接池的几个概念,有助于后边一些文字的理解。
    最原始的数据库使用就是打开一个连接并进行使用,使用过后一定要关闭连接释放资源。由于频繁的打开和关闭连接对jvm包括数据库
    都有一定的资源负荷,尤其应用压力较大时资源占用比较多容易产生性能问题。由此使用连接池的作用就显现出来,他的原理其实不复杂:
    先打开一定数量的数据库连接,当使用的时候分配给调用者,调用完毕后返回给连接池,注意返回给连接池后这些连接并不会关闭,而是
    准备给下一个调用者进行分配。由此可以看出连接池节省了大量的数据库连接打开和关闭的动作,对系统性能提升的益处不言而喻。
    几个概念:
    最小连接--应用启动后随即打开的连接数以及后续最小维持的连接数。
    最大连接数--应用能够使用的最多的连接数
    连接增长数--应用每次新打开的连接个数
    举个例子说明连接池的运作:
    假设设置了最小和最大的连接为10,20,那么应用一旦启动则首先打开10个数据库连接,但注意此时数据库连接池的正在使用数字为0--因为你并没有使用这些连接,而空闲的数量则是10。然后你开始登录,假设登录代码使用了一个连接进行查询,那么此时数据库连接池的正在使用数字为1、空闲数为9,这并不需要从数据库打开连接--因为连接池已经准备好了10个给你留着呢。登录结束了,当前连接池的连接数量是多少?当然是0,因为那个连接随着事务的结束已经返还给连接池了。然后同时有11个人在同一秒进行登录,会发生什么:连接池从数据库新申请(打开)了一个连接,连同另外的10个一并送出,这个瞬间连接池的使用数是11个,不过没关系正常情况下过一会儿又会变成0。如果同时有21个人登录呢?那第21个人就只能等前面的某个人登录完毕后释放连接给他。这时连接池开启了20个数据库连接--虽然很可能正在使用数量的已经降为0,那么20个连接会一直保持吗?当然不,连接池会在一定时间内关闭一定量的连接还给数据库,在这个例子里数字是20-10=10,因为只需要保持最小连接数就好了,而这个时间周期也是连接池里配置的。

    好了,基本概念说完了,言归正传进行比较了。
    首先说明的一点,为了应用便于移植以及可配置的角度,建议还是使用jndi统一进行连接池的配置。怎么配置其实网上都有很多例子,
    这里简单举个例子(使用spring框架):
    首先在应用的上下文定义中配置jndi名称,如一个resource.xml文件,里边的写法
        <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="jndiName"><value>jdbc/myapp</value></property>
        </bean>
    注意dataSource这个bean在dao层(hibernate或jdbc)的配置文件里需要作为dataSource名称的属性配置到所有bean中
    其中“jdbc/myds”这个就是jndi名称了,下一步就是在应用服务器连接池里进行数据库连接以及对应的jndi配置了

    一 开源数据连接池
    1 dbcp
    dbcp可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和tomcat应用例子都是使用的这个连接池吧。
    这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。这个连接池的配置参见附件压缩包中的:dbcp.xml
    使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性
    有所下降,此外不提供连接池监控

    2 c3p0
    c3p0是另外一个开源的连接池,在业界也是比较有名的,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。
    这个连接池的配置参见附件压缩包中的:c3p0.xml。
    使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性相当不错,在大并发量的压力下稳定性也有一定保证,
              此外不提供连接池监控。
             
    3 proxool
    proxool这个连接池可能用到的人比较少,但也有一定知名度,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。
    这个连接池的配置参见附件压缩包中的:proxool.xml。
    使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性有一定问题,有一个需要长时间跑批的任务场景任务,同样的代码
    在另外2个开源连接池中成功结束,但在proxool中出现异常退出。
    但是proxool有一个优势--连接池监控,这是个很诱人的东西,大概的配置方式就是在web.xml中添加如下定义:
        <servlet>
            <servlet-name>admin</servlet-name>
            <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>     
       </servlet>
       <servlet-mapping>
          <servlet-name>admin</servlet-name>
          <url-pattern>/admin</url-pattern>
       </servlet-mapping>  
    并在应用启动后访问:http://localhost:8080/myapp/admin这个url即可监控
    不过proxool本身的包在监测使用中会有编码问题,附件中有一个
    解决此问题的包,参见附件压缩包中的:proxool-0.9.0RC3.jar。另外需要jdk1.5以上的环境。

    总结时刻:
    综上所述,这几种开源连接池各有优劣,推荐使用c3p0,经检验这种连接池性能稳定,承压能力强。而proxool尽管有明显的性能问题,
    但由于它具备监控功能,因此建议在开发测试时使用,有助于确定是否有连接没有被关掉,可以排除一些代码的性能问题。

    二 商业中间件连接池
    上面列举了几种开源的连接池,其实可以肯定的说,如果条件允许使用weblogic和websphere等中间件,那么不要犹豫,一定要
    使用这些商业级别的中间件所自带的数据库连接池,他们的性能以及调配和开源的不在一个量级,举个例子,曾经有一个项目,数据量比较大,同样的代码应用,在3种开源的连接池里都多少出现过系统异常,而weblogic和websphere的连接池则正常运行,当然后来发现代码有一定瑕疵,但也侧面说明了商业连接池的强大。

    1 weblogic的连接池
    weblogic 8 是一个让人使用起来很轻松方便的应用服务器软件,但是到了9简直就是折磨,不知道是bea是怎么想的,oracle收购了bea以后出了10,比9强不少,但是最喜欢的还是8。。。
    题外话不说了,就以8.1版本介绍一下他的数据库连接池(其实10的配置也差不多)
    首先是连接池的基本设置,这个不讲了,网上有很多教程。然后进入Data Sources菜单配置数据源里边的JNDI Name,要和之前在应用配置中的一致:jdbc/myapp。
    然后是连接池一些具体项目的配置,包括设置最小(Initial Capacity),最大( Maximum Capacity)连接,以及
    每次连接增加时需要一次性增加多少连接(Capacity Increment)。Allow Shrinking(是否把不用的连接退还数据库以保持最小连接数--这个就可以参见之前的连接池阐述的例子进行理解了)。
    另外还有几个有意思的选项Test Reserved Connections:对取得的连接进行测试,Test Released Connections:对释放的连接进行测试。有人会问了,这个有什么用啊?
    不知道大家在项目中有没有遇到java报连接失效的异常,反正我碰到过,只有在系统压力大的时候才出现。而有了这个选项就不用担心这个问题了--因为连接池已经帮你测试了,一旦检查到连接是无效的他会废弃掉还给数据库,只给你有效的。不过这个连接失效的异常其实多半是应用的不严谨造成的,我们更因该关心应代码的问题--但起码weblogic想到帮你弥补一下,是不是很贴心:)
    另外一个重要功能当然是连接池监控:monitor选项卡里可以看到使用情况,有人又要问了,没有什么指标啊,别忘了custom view这个功能链接哦:)
    有以下指标:当前连接数、曾经达到的峰值、可以使用的连接数、等待的连接数、从数据库打开的连接数、曾经关闭的连接数。。。其中前3项是我最关注的

    使用评价:在具体项目应用中,此连接池的持续运行的稳定性很强,在大并发量的压力下性能也相当优秀,另外在一些异常情况下连接池里的连接也能够及时释放。
              连接池监控一目了然,及时到位。        

    2 websphere的连接池
    还是先来段题外话:记得有人说过,websphere只有版本6以后才算是websphere,个人很赞同。websphere 5以及以前的版本。。。还是忘了吧。
    其实websphere的连接池秉承ibm一贯的风格:功能强大,使用复杂:)
    进入控制台使用“JDBC提供程序”功能菜单进行连接池的基本配置,一路下来,不同的数据库配置方式不尽相同,最奇怪的是还要单独手工加上user和password参数,如果没有
    资料指导的话还真是摸不着头脑。这些基本设置还是网上找吧很多的。连接池设置完还需要设置数据源,jndi名字一样与之前的对应:jdbc/myapp
    高级设置包括初始化连接数,最大连接,连接有效性检查,不使用超时。。其实这些都和weblogic中的连接池配置大致一样。
    连接池监控:使用运行监控菜单,里边会有一个监控项目选择,选jdbc监控即可,可恶的是一开始弹出什么服务器操作系统需要安装什么图形化控件,选择是那么就得去找到控件在操作系统(linux)下安装,然后很多的依赖组件都没有。。。搞了半天才发现选择否,监控数据以及图形一样能出来嘛,真是要怒了。
    虽然经过一番波折但是监控的内容还是很强大的,就连接池来说一样包括当前连接数、曾经达到的峰值、可以使用的连接数、从数据库打开的连接数、曾经关闭的连接数。。。其中前3项是我最关注的,比较奇怪的现象是应用刚启动的时候已开启的连接数量竟然没有达到初始定义的连接数量,不清楚websphere是怎么个计算机制。
    另外在压力大的时候可使用的连接数会是负数,当时很奇怪,想想也了然了,那个负数肯定是排队等待的数量了

    使用评价:在具体项目应用中,此连接池的持续运行的稳定性相当强,在大并发量的压力下性能也足够优秀,另外在一些异常情况下连接池里的连接能够及时释放,
              连接池监控配置有些复杂,但是配置好后各项指标一目了然并且有图形显示 

     

    • Druid 连接池简介

    Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。

    同时Druid不仅仅是一个数据库连接池,它包括四个部分:

        Druid是一个JDBC组件,它包括三个部分:

        基于Filter-Chain模式的插件体系。

        DruidDataSource 高效可管理的数据库连接池。

        SQLParser

    Druid的功能

    1、替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。

    2、可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。

    3、数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。

    4、SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。

    5、扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便编写JDBC层的扩展插件。

    • 使用原因

                 原先项目使用的是C3P0连接池,在项目发布使用一段时间后发现c3p0 连接池访问数据库的时候创建连接会在oralce的lisenter.log 日志文件记录。 

    经过一段时间观察发现oralce每6秒会在lisenter.log日志记录一次,我们设置的最小连接是20,所以oracle每次会在日志记录20条。随着时间越长日志文件越来越大,当日志文件达到4个G的时候会导致oracle死掉。 经过不断调整参数配置还是无法得到解决方案,最后选择使用阿里Druid连接池试试,Druid默认最小连接2个,配置好后发布观察日志发现只在创建的时候在日志里面记录了2条记录。没有像C3P0那样每6秒记录一次导致日志文件越来越大。 

    lisenter.log 日志截图

     

    • Druid使用

           1. Druid.jar包

                           druid-1.1.4.jar   1.1.4

           2.Druid连接池配置

                         

               这里没有配置最小连接数 ,默认为2个。

            3.Druid属性配置图

    配置缺省值
    说明
    name 配置这个属性的意义在于,如果存在多个数据源,监控的时候 
    可以通过名字来区分开来。如果没有配置,将会生成一个名字, 
    格式是:"DataSource-" + System.identityHashCode(this)
    jdbcUrl 连接数据库的url,不同数据库不一样。例如: 
    mysql : jdbc:mysql://10.20.153.104:3306/druid2  
    oracle : jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
    username 连接数据库的用户名
    password 连接数据库的密码。如果你不希望密码直接写在配置文件中, 
    可以使用ConfigFilter。详细看这里: 
    https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter
    driverClassName根据url自动识别这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName
    initialSize0初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
    maxActive8最大连接池数量
    maxIdle8已经不再使用,配置了也没效果
    minIdle 最小连接池数量
    maxWait 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
    poolPreparedStatementsfalse是否缓存preparedStatement,也就是PSCache。 
    PSCache对支持游标的数据库性能提升巨大,比如说oracle。 
    在mysql5.5以下的版本中没有PSCache功能,建议关闭掉。
    作者在5.5版本中使用PSCache,通过监控界面发现PSCache有缓存命中率记录, 
    该应该是支持PSCache。
    maxOpenPreparedStatements-1要启用PSCache,必须配置大于0,当大于0时, 
    poolPreparedStatements自动触发修改为true。 
    在Druid中,不会存在Oracle下PSCache占用内存过多的问题, 
    可以把这个数值配置大一些,比如说100
    validationQuery 用来检测连接是否有效的sql,要求是一个查询语句。 
    如果validationQuery为null,testOnBorrow、testOnReturn、 
    testWhileIdle都不会其作用。
    testOnBorrowtrue申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
    testOnReturnfalse归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
    testWhileIdlefalse建议配置为true,不影响性能,并且保证安全性。 
    申请连接的时候检测,如果空闲时间大于 
    timeBetweenEvictionRunsMillis, 
    执行validationQuery检测连接是否有效。
    timeBetweenEvictionRunsMillis 有两个含义: 
    1) Destroy线程会检测连接的间隔时间 
    2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
    numTestsPerEvictionRun 不再使用,一个DruidDataSource只支持一个EvictionRun
    minEvictableIdleTimeMillis  
    connectionInitSqls 物理连接初始化的时候执行的sql
    exceptionSorter根据dbType自动识别当数据库抛出一些不可恢复的异常时,抛弃连接
    filters 属性类型是字符串,通过别名的方式配置扩展插件, 
    常用的插件有: 
    监控统计用的filter:stat  
    日志用的filter:log4j 
    防御sql注入的filter:wall
    proxyFilters 类型是List<com.alibaba.druid.filter.Filter>, 
    如果同时配置了filters和proxyFilters, 
    是组合关系,并非替换关系

       

        4.数据源监控配置

              在项目的web.xml加上以下代码

                                  

    复制代码

     1 <filter>
     2         <filter-name>DruidWebStatFilter</filter-name>
     3         <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
     4         <init-param>
     5             <param-name>exclusions</param-name>
     6             <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
     7         </init-param>
     8     </filter>
     9     <filter-mapping>
    10         <filter-name>DruidWebStatFilter</filter-name>
    11         <url-pattern>/*</url-pattern>
    12     </filter-mapping>
    13     
    14     <servlet>
    15         <servlet-name>DruidStatView</servlet-name>
    16         <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    17     </servlet>
    18     <servlet-mapping>
    19         <servlet-name>DruidStatView</servlet-name>
    20         <url-pattern>/druid/*</url-pattern>
    21     </servlet-mapping>


             
    总结时刻:
    这两种商业级别的连接池都给我留下深刻印象,功能强大,使用稳定,性能优秀,监控到位。可以说难分伯仲,相对而言weblogic的连接池使用配置和监控配置更简单明了,而websphere的更复杂但选项功能也更多一些。其实这正是对两种应用服务器的使用印象的直接反映,当然总体比较2种应用服务器应该又是另一个话题了,也许在下一期的内容里。。。

    比较了多种连接池的优劣,下面这个话题可能和比较本身没有直接关系,但个人认为应该是更有价值的一些经验分享吧,那就是---这么多指标配置,那些最大和最小连接数以及其他一些必要的配置指标,在一个正式的生产项目中到底应该配置什么值呢?
    其实这个值首先还是要根据具体的项目情况、数据规模以及并发数来制定的(尽管像是套话,但是我们研发人员严谨的作风还是必要的:)。具体而言在中型偏小型的项目--给个数值把,用户数300到3000,数据量100万到1亿---中,建议weblogic设置为最大和最小都是200,websphere最小200最大300,前提是2者设置的最小内存要在1G以上,当然如果条件允许内存越大越好,不过32位机内存1.5G的限制是一定的(64位嘛我愿意设个4G内存过来,速度提升的感觉很爽啊)。这个数字出来以后相信会有不少问题要抛过来,我一一谈一下自己的体验和想法吧
    1 为什么是200或300而不是更高?
    回答:  再分配多了效果也不大了,一个是应用服务器维持这个连接数需要内存支持,刚才说了32位的机器只能支持到1.5G,并且维护大量的连接进行分配使用对cpu也是一个不小的负荷,因此不宜太大。
    2 为什么不小一点?
    回答:   如果太小,那么在上述规模项目的并发量以及数据量上来以后会造成排队现象,系统会变慢,数据库连接会经常打开和关闭,性能上有压力,用户体验也不好。
    3 为什么weblogic最小最大都一样,而websphere不一样
    回答:   其实和分配内存的最小最大值的情况一样,一般都推荐2个值应该一致,都放在内存里就好了嘛。但是ibm官方推荐2个值要有区别---官方说法还是要听的
    4 其他开源连接池的分配方案还没说呢?
    回答: 开源的个人认为到100就可以了,再高他也不会太稳定,当然1G的最小内存是一定要给tomcat分的

    展开全文
  • java数据库连接池connectionPool.zip java数据库连接池connectionPool.zip java数据库连接池connectionPool.zip java数据库连接池connectionPool.zip java数据库连接池connectionPool.zip
  • NULL 博文链接:https://alex295111.iteye.com/blog/726809
  • 石Q动力节莞 Power node Java数据库连接池之DBCP浅析 一?为何要使用敬据库巡接池 假设网站一天很大的访问量数据廊反务器就霄要为每次连接创建一次数据瘁连接极大的浪薮数猖库的资源并且 极易造解媚库服务翡内存...
  • 主要介绍了java数据库连接池和数据库连接示例,需要的朋友可以参考下
  • 主要介绍了Java数据库连接池c3p0过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了Java实现数据库连接池的方法,涉及java数据库连接池的创建、连接、刷新、关闭及状态获取的常用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • java代码详细描述了连接池的原理实现,注释也非常详细
  • Java数据库连接池详解(三)
  • python 通过数据库连接池访问数据库工具,支持可配置数据连接池大小,并发连接数配置
  • 主要为大家详细介绍了Java数据库连接池之c3p0简介的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • java oracle 数据库 连接池 小例子 里面很详尽的使用C3p0,配置文件, 可以成功运行, 只需要修改一下配置文件里面的驱动就好了
  • java数据库连接池例子

    2009-11-30 17:03:49
    java数据库连接池例子,非常经典. 这个例子是根据POSTGRESQL数据库写的, 请用的时候根据实际的数据库调整。 调用方法如下: ① ConnectionPool connPool = new ConnectionPool("org.postgresql.Driver" ,...
  • Java语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁
  • Java数据库连接池详解

    千次阅读 2017-10-26 21:06:27
    1.数据库连接池概述 数据库连接的建立是一种耗时、性能低、代价高的操作,频繁的数据库连接的建立和关闭极大的影响了系统的性能。数据库连接池是系统初始化过程中创建一定数量的数据库连接放于连接池中,当程序需要...

     

    一.数据库连接池概述

    数据库连接的建立是一种耗时、性能低、代价高的操作,频繁的数据库连接的建立和关闭极大的影响了系统的性能。数据库连接池是系统初始化过程中创建一定数量的数据库连接放于连接池中,当程序需要访问数据库时,不再建立一个新的连接,而是从连接池中取出一个已建立的空闲连接,使用完毕后,程序将连接归还到连接池中,供其他请求使用,从而实现的资源的共享,连接的建立、断开都由连接池自身来管理。

     

    数据库连接池为系统的运行带来了以下优势:昂贵的数据库连接资源得到重用;减少了数据库连接建立和释放的时间开销,提高了系统响应速度;统一的数据库连接管理,避免了连接资源的泄露。

     

    数据库连接池运行机制:

    系统初始化时创建连接池,程序操作数据库时从连接池中获取空闲连接,程序使用完毕将连接归还到连接池中,系统退出时,断开所有数据库连接并释放内存资源。

    二.主流数据库连接池比较

    常用的主流开源数据库连接池有C3P0、DBCP、Tomcat Jdbc Pool、BoneCP、Druid等

    (1)、C3p0

    开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。单线程,性能较差,适用于小型系统,代码600KB左右。

    (2)、DBCP (Database Connection Pool)

    由Apache开发的一个Java数据库连接池项目, Jakarta commons-pool对象池机制,Tomcat使用的连接池组件就是DBCP。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar,预先将数据库连接放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完再放回。单线程,并发量低,性能不好,适用于小型系统。

    (3)、Tomcat Jdbc Pool

    Tomcat在7.0以前都是使用common-dbcp做为连接池组件,但是dbcp是单线程,为保证线程安全会锁整个连接池,性能较差,dbcp有超过60个类,也相对复杂。Tomcat从7.0开始引入了新增连接池模块叫做Tomcat jdbc pool,基于Tomcat JULI,使用Tomcat日志框架,完全兼容dbcp,通过异步方式获取连接,支持高并发应用环境,超级简单核心文件只有8个,支持JMX,支持XA Connection。

    (4)、BoneCP

    官方说法BoneCP是一个高效、免费、开源的Java数据库连接池实现库。设计初衷就是为了提高数据库连接池性能,根据某些测试数据显示,BoneCP的速度是最快的,要比当时第二快速的连接池快25倍左右,完美集成到一些持久化产品如Hibernate和DataNucleus中。BoneCP特色:高度可扩展,快速;连接状态切换的回调机制;允许直接访问连接;自动化重置能力;JMX支持;懒加载能力;支持XML和属性文件配置方式;较好的Java代码组织,100%单元测试分支代码覆盖率;代码40KB左右。

    (5)、Druid

    Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能,是一个可用于大数据实时查询和分析的高容错、高性能的开源分布式系统,尤其是当发生代码部署、机器故障以及其他产品系统遇到宕机等情况时,Druid仍能够保持100%正常运行。主要特色:为分析监控设计;快速的交互式查询;高可用;可扩展;Druid是一个开源项目,源码托管在github上。

    主流连接池各项功能对比如下:

    三.Spring集成配置与JNDI配置

    下面针对每一种连接池的使用方法,在开发中如何配置给出spring集成配置和在tomcat的conf/context.xml文件中配置2种方式,限于篇幅只给出基本参数,详细参数可自行研究。以下主要讲推荐用的Druid和Tomcat Jdbc Pool的配置。

    (1)、 阿里Druid连接池

    Maven依赖

     
    <dependency>
     <groupId>com.alibaba</groupId>
     <artifactId>druid</artifactId>
     <version>1.0.28</version>
    </dependency>

    1)Spring集成配置方式

    spring数据源配置

     

    <!--SpringDruid 数据源配置-->
    <beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close">
    <!-- 基本属性 url、user、password -->
    <propertyname="url"value="${jdbc.url}"/>
    <propertyname="username"value="${jdbc.username}"/>
    <propertyname="password"value="${jdbc.password}"/>
    <!-- 配置初始化大小、最小、最大 -->
    <propertyname="initialSize"value="1"/>
    <propertyname="minIdle"value="1"/>
    <propertyname="maxActive"value="20"/>
    <!-- 配置获取连接等待超时的时间 -->
    <propertyname="maxWait"value="60000"/>
    <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    <propertyname="timeBetweenEvictionRunsMillis"value="60000"/>
    <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    <propertyname="minEvictableIdleTimeMillis"value="300000"/>
    <!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
    <propertyname="poolPreparedStatements"value="true"/>
    <propertyname="maxPoolPreparedStatementPerConnectionSize"value="20"/>
    <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
    <propertyname="filters"value="stat"/>
    </bean>

     

     

     

    web.xml配置

    <!--druid WebStatFilter用于采集web-jdbc关联监控的数据-->
    <filter>
     <filter-name>DruidWebStatFilter</filter-name>
     <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
     <init-param>
    <param-name>exclusions</param-name>
    <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
     </init-param>
    </filter>
    <filter-mapping>
     <filter-name>DruidWebStatFilter</filter-name>
     <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!--druid访问监控界面 /druid/index.html-->
    <servlet>
     <servlet-name>DruidStatView</servlet-name>
     <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
    </servlet>
    <servlet-mapping>
     <servlet-name>DruidStatView</servlet-name>
     <url-pattern>/druid/*</url-pattern>
    </servlet-mapping>

    2)Tomcat中context.xml文件JNDI配置方式

    com.alibaba.druid.pool.DruidDataSourceFactory实现了javax.naming.spi.ObjectFactory,可以作为JNDI数据源来配置

    <TOMCAT_HOME>/conf/context.xml配置JNDI方式

    <Resource
       name="jdbc/MysqlDataSource"
       factory="com.alibaba.druid.pool.DruidDataSourceFactory"
       auth="Container"
       type="javax.sql.DataSource"
       driverClassName="com.mysql.jdbc.Driver"    url="jdbc:mysql://192.168.1.233:3306/lead_oams?useUnicode=true&characterEncoding=utf-8"
       username="lead_system"
       password="password"
       maxActive="50"
       maxWait="10000"
       removeabandoned="true"
       removeabandonedtimeout="60"
       logabandoned="false"
       filters="stat"/>

    (2)、Tomcat Jdbc Pool连接池

     

    Maven依赖

     

    <dependency>
     <groupId>org.apache.tomcat</groupId>
     <artifactId>tomcat-jdbc</artifactId>
     <version>7.0.75</version>
    </dependency>
    <dependency>
     <groupId>org.apache.tomcat</groupId>
     <artifactId>tomcat-juli</artifactId>
     <version>7.0.75</version>
    </dependency>

    1)Spring集成Tomcat Jbdc Pool配置方式  

    <!--tomcat jdbc pool数据源配置-->        
    <bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">   
        <property name="poolProperties"> 
            <bean class="org.apache.tomcat.jdbc.pool.PoolProperties">   
                <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
                <property name="url" value="jdbc:mysql://localhost:3306/yi_piaodb?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true"/>   
                <property name="username" value="root"/>   
                <property name="password" value="root"/> 
                <property name="jmxEnabled" value="true"/> 
                <property name="testWhileIdle" value="true"/> 
                <property name="testOnBorrow" value="true"/>   
                <property name="testOnReturn" value="false"/>   
                <property name="validationInterval" value="30000"/>   
                <property name="validationQuery" value="SELECT 1"/>   
                <property name="timeBetweenEvictionRunsMillis" value="30000"/>   
                <property name="maxActive" value="100"/>   
                <property name="initialSize" value="10"/>   
                <property name="maxWait" value="10000"/>   
                <property name="minEvictableIdleTimeMillis" value="30000"/>   
                <property name="minIdle" value="10"/>   
                <property name="logAbandoned" value="false"/>   
                <property name="removeAbandoned" value="true"/>   
                <property name="removeAbandonedTimeout" value="60"/> 
                <property name="jdbcInterceptors" value="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"/>   
            </bean>   
        </property>   
    </bean>
     
     
     
     

    2)Tomcat中context.xml文件JNDI配置方式

    <Resource
    name="jdbc/test"
    auth="Container"
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
    testWhileIdle="true"
    testOnBorrow="true"
    testOnReturn="false"
    validationQuery="SELECT 1"
    validationInterval="30000"
    timeBetweenEvictionRunsMillis="30000"
    driverClassName="com.mysql.jdbc.Driver"
    maxActive="100"
    maxIdle="40"
    maxWait="12000"
    initialSize="10"
    removeAbandonedTimeout="60"
    removeAbandoned="true"
    logAbandoned="true"
    minEvictableIdleTimeMillis="30000"
    jmxEnabled="true"
    jdbcInterceptors=
    "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
    username="root"  
    password="root"  
    type="javax.sql.DataSource"
    url="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"/>

    Java代码中获取JNDI数据源

     
    //1、初始化名称查找上下文
    Context ctx =new InitialContext();
    //2、通过JNDI名称找到DataSource
    DataSource ds= (DataSource) ctx.lookup("java:comp/env/jdbc/test");
    //3、通过ds获取数据库连接对象
    Connectionconn = ds.getConnection();

     

    The end!

     

     

    展开全文
  • druid包,druid-1.2.1,包含源码在内,打包好的jar。配置文件,以及数据库连接驱动 (mysql-connector-java-5.1.1.jar)
  • 自己写的轻量级的数据库连接池,项目打包文件,下载添加数据库驱动jar包就能使用
  • java实现JDBC数据库连接池的原理,里面oracle驱动jar包,以及代码的阅读步骤
  • 第一步:写javabean 代码如下: package withouttears.jdbc.db; import java.util.HashMap; import java.sql.*;... //数据库资源的连接工厂是javax.sql.DataSource对象, //它可以创建java.sql.Connec

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 217,627
精华内容 87,050
关键字:

java数据库连接池有哪些

java 订阅