zoukankan      html  css  js  c++  java
  • Java中连接池

    最近在看书,其中有一段是:

    相信有大佬已经能看得出来这是《企业IT架构转型之道》这本书了(这是一本不错的书,推荐工作时长>2年的软件人员可以看看)~~

    对于红色框内的那段文字,我有两个概念不是很明白:

    1、应用实例指的是什么?

    2、连接池是什么?在什么时候发挥作用?以及什么时候被配置上?

    带着疑问,我查阅了大量的资料,也问了大神,大概弄清楚了。

    应用实例

    应用实例指的是一个应用需要连接数据库的后台(如淘宝后台就是一个应用实例)。

    连接池

    说到Java中的连接池,我们不可避免的要说到数据库连接池(connection pool),Java连接池就是数据库连接池在Java上的应用。

    大家都知道,对于资源共享,有一个很有名的设计模式-资源池(Resource Pool)。网络上对于资源池的解释是这样的:

     简言之,连接池是将已经创建好的连接保存在池中,当检测到有请求时,直接使用创建好的连接对数据库进行访问,这样可以节省创建连接和销毁连接所带来的的时间成本。

    在数据库连接池中,涉及到三个主要的参数:

    - 最大维持连接数:没有任何请求时在连接池中可以存在的连接数

    - 最大连接数:连接池中最多可以存在的连接个数。

    - 最大等待时间:当断开连接时,超过最大维持连接数的连接不会马上销毁,最大等待时间过后它才会销毁。

    参数使用的场景实例如下:

    当最大维持连接数是10,最大连接数是20,最大等待时间是10000(毫秒)时,
    访问数据库,调用连接池的过程是:最开始在连接池中有10个连接(最大连接数),当有用户申请连接时,其将一个连接分配用户,直到连接池中的10个连接全都分配出去。当第11个用户申请连接时,它将创建第11个连接并分配给该用户,直到把第20个连接(最大连接数)分配给第20个用户。
    当第21个用户申请连接时,它需要等待,直到前面的20个用户中某一个断开了连接,才会把那个连接分配给第21个用户,当用户断开连接时(第11至20个连接),该连接不会立刻被释放而是需要等待10000毫秒(最大等待时间),才被释放,当没有用户连接时,连接池内还保持10个连接。

    至此,数据库连接池是什么以及在什么时候发挥作用基本很清楚了。现在来讨论下他怎么被配置。

    在应用的META-INF文件夹下创建一个context.xml配置文件,并在其中添加<Context>标签进行配置,但,这种方式生成的数据源只能用于当前应用。

    <?xml version="1.0" encoding="utf-8" ?>  
    <Context>  
    <Resource name="jdbc/EmployeeDB" 当前创建数据连接池的名字,自己定义,在使用jndi容器获取该数据源对象时会用到  
                auth="Container" 作者  
                type="javax.sql.DataSource" 对象类型这里固定为DataSource即可  
                username="dbusername" 数据库连接的用户名  
                password="dbpassword" 连接密码  
                driverClassName="com.mysql.jdbc.Driver" 驱动  
                url="jdbc:mysql:///dbcptest" 数据库的url  
                maxActive="8"  DBCP的参数,DBCP的其他参数可以加入  
                maxIdle="4"/>  
    </Context>  

    在tomcat启动时,会逐个加载其中的应用,当其加载到当前应用时,会加载到 META-INF文件夹下的 context.xml 配置文件,此时tomcat会根据其中的配置信息为当前应用创建一个数据库连接池,该数据库连接池只能用于当前应用,tomcat下的其他应用无法使用该数据库连接池。

    附加:虽然数据库连接池可以帮助我们节省大量的时间成本,但在开发中,使用连接池时若没有关闭连接(调用连接的close方法)会出现“连接池疲劳的错误”。

    扩展阅读

    - Java 中几种主流的数据库连接池

    - 三种数据库连接池的配置及使用(For JDBC)

    - TomCat 源码分析-线程池应用

    - 详解TomCat的连接数与线程池

    连接池含义、作用和工作过程(四个流行的Java连接池)

  • 相关阅读:
    第十四周学习进度总结
    第十三周学习进度总结
    第十二周学习进度总结
    第十一周学习进度总结
    第十周学习进度总结
    第九周学习进度总结
    第八周学习进度总结
    day16-机器学习十讲第一讲
    day15-验证码识别
    day14-卷积网络识别手写数字
  • 原文地址:https://www.cnblogs.com/lilala-world/p/11156771.html
Copyright © 2011-2022 走看看