数据库连接池

Posted 虫儿aqa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库连接池相关的知识,希望对你有一定的参考价值。

数据库连接池

Connection 创建该连接耗资源

 

用来提高性能

 

在连接池创建的时候就创建好一些连接放在里面,放在池里面,每次有请求上来,直接从数据连接池里面直接去获取连接

最大连接数

最小连接数

最大空闲连接数

最小空闲连接数

等待超时

 

C3p0  会自动释放连接数

Dbcp  不会自动释放连接

 

连接池创建的时候,创建一定数据的连接放到连接池里面,每次请求直接从连接池里面获取,如果连接池的数量还没有达到最大的连接数,如果连接池中没有可用的连接,创建一个新的连接,如果连接池中的数量已经达到了最大连接,该请求处于等待状态,等待连接被换回来 当数据库连接池中的空闲连接大于最小连接数且空闲时间超过了设置的时间则系统会回收掉最小连接数以外的连接 

C3p0 连接

<!-- c3p0连接池 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
<!-- 使用c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driverClassName}"/>
    <property name="jdbcUrl" value="${jdbc.url}"/>
    <property name="user" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
   <!--   连接池中最小的连接数据  连接池中一定要保证有5个连接  默认是3个-->
    <property name="minPoolSize" value="5"/>
   <!--   连接池中最大的连接数  默认是15个-->
    <property name="maxPoolSize" value="20"/>
  <!--    最大的空闲时间  单位是秒 0表示永不过期  这里的空闲时间指的是连接被放回连接池之后处于空闲状态的时间,只能释放最小连接池中数量以上的连接-->
    <property name="maxIdleTime" value="100"/>
    <!--  初始化连接数量  默认情况是3 初始化的数量是minPoolSize到maxPoolSize的范围-->
    <property name="initialPoolSize" value="6"/>
</bean> 

 

Dbcp连接池

<!-- dbcp连接池 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.1.1</version>
        </dependency>
<!-- 使用dbcp连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
    <property name="url" value="${jdbc.url}"/>
    <property name="username" value="${jdbc.username}"/>
    <property name="password" value="${jdbc.password}"/>
    <!--连接池创建的时候 初始化 6个连接 默认是0个  -->
    <property name="initialSize" value="6"/>
    <!--连接池中最大的连接数  默认是8个  如果是负数表示没有限制 -->
    <property name="maxTotal" value="20"/>
   <!--最大的空闲数量 负数表示永不过期  默认是8个-->
    <property name="maxIdle" value="15"/>
    <!--最小的空闲数量 负数表示永不过期  默认是0个-->
    <property name="minIdle" value="8"/>
    <!--等待时间,当没有连接可用的时候处于等待的时间,超出时间抛出异常   默认情况等待无穷,负数也表示无穷-->
    <property name="maxWaitMillis" value="10000"/>
</bean>

 druid连接池配置

 

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

 

 

 

 

 

<!-- 阿里 druid数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <!-- 数据库基本信息配置 -->
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
        <property name="driverClassName" value="${driverClassName}" />
        <property name="filters" value="${filters}" />
        <!-- 最大并发连接数 -->
        <property name="maxActive" value="${maxActive}" />
        <!-- 初始化连接数量 -->
        <property name="initialSize" value="${initialSize}" />
        <!-- 配置获取连接等待超时的时间 -->
        <property name="maxWait" value="${maxWait}" />
        <!-- 最小空闲连接数 -->
        <property name="minIdle" value="${minIdle}" />
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" />
        <property name="validationQuery" value="${validationQuery}" />
        <property name="testWhileIdle" value="${testWhileIdle}" />
        <property name="testOnBorrow" value="${testOnBorrow}" />
        <property name="testOnReturn" value="${testOnReturn}" />
        <property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements}" />
        <!-- 打开removeAbandoned功能 -->
        <property name="removeAbandoned" value="${removeAbandoned}" />
        <!-- 1800秒,也就是30分钟 -->
        <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" />
        <!-- 关闭abanded连接时输出错误日志 -->
        <property name="logAbandoned" value="${logAbandoned}" />
    </bean>

 

 

 

 

web.xml

<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>
    <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>

 

 https://github.com/alibaba/druid/wiki/首页     具体查看网站

 

以上是关于数据库连接池的主要内容,如果未能解决你的问题,请参考以下文章

newCacheThreadPool()newFixedThreadPool()newScheduledThreadPool()newSingleThreadExecutor()自定义线程池(代码片段

连接池报错 Proxool Provider unable to load JAXP configurator file: proxool.xml

MySQL与Redis数据库连接池介绍(图示+源码+代码演示)

稳定性 耗时 监控原因分析-- dubbo rpc 框架 的线程池,io 连接模型. 客户端,服务端

基于UniDac的数据库连接池

数据库连接池的Java连接池