zoukankan      html  css  js  c++  java
  • Spring框架中获取连接池的几种方式

    什么是数据库连接池?

         数据库连接池是一种关键的有限的昂贵的资源,对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池就是用来解决这些问题而提出的。

         数据库连接池负责分配、管理和释放数据库连接。实际应用中,频繁的连接和关闭数据库,将会产生极大的消耗,影响应用的性能,造成不必要的资源浪费。连接池会预先创建一部分数据库连接以便使用,同时允许应用程序重复使用一个现有的数据库连接。数据库连接池创建的时候设置连接池最小和最大连接数,最小连接数即为,不管该连接是否被使用,都会预先创建。如果连接使用超出最小连接数,会在创建一个数据库连接。最大连接数为该连接池能承载的最大连接数量,如果超出这个数,后面的数据库连接请求将会进入等待队列。超出最小连接数而创建的连接使用结束后,不会被立马释放,而是会被放在连接池中等待被重复使用,或者等超出空闲时间后被释放。

    连接方式:

       1.DBCP数据源:

        (数据源:连接数据库所需的类和参数)

        DBCP配置Mysql数据源(通常是写在mybatis的配置文件中):

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
        
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
        
        <!--initialSize: 初始化连接--> 
        <property name="initialSize" value="5"/> 
        <!--maxIdle: 最大空闲连接--> 
        <property name="maxIdle" value="10"/> 
        <!--minIdle: 最小空闲连接--> 
        <property name="minIdle" value="5"/> 
        <!--maxActive: 最大连接数量--> 
        <property name="maxActive" value="15"/>
        
        <!--removeAbandoned: 是否自动回收超时连接--> 
        <property name="removeAbandoned" value="true"/> 
        <!--removeAbandonedTimeout: 超时时间(以秒数为单位)--> 
        <property name="removeAbandonedTimeout" value="180"/> 
        <!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒--> 
        <property name="maxWait" value="3000"/> 
        <!-- 在空闲连接回收器执行周期(毫秒) -->
        <property name="timeBetweenEvictionRunsMillis" value="10000"/>
        <!--  在每次空闲连接回收器线程(如果有)运行时检查的连接数量 -->
        <property name="numTestsPerEvictionRun" value="10"/>
        <!-- 最小空闲时间-->
        <property name="minEvictableIdleTimeMillis" value="10000"/>
        <!-- 验证链接是否有效的sql语句 -->
        <property name="validationQuery" value="select 1" />
        <!-- 获取链接之前是否测试链接的可用性 -->
        <property name="testOnBorrow" value="true"/> 
    </bean> 

       2.C3P0数据源:

          C3P0是一个开源的JDBC数据源实现项目,依赖包:c3p0-0.9.0.4.jar,xml中配置方式与DBCP类似,此处不再赘述。

       3.Spring的数据源实现类 DriverManagerDataSource:

         这是Spring本身提供的一个简单的数据源实现类,它位于org.springframework.jdbc.datasource接口中。该类实现接口javax.sql.DataSource接口,但是它并没有提供池化的连接机制,每次调用getConnection()获取新连接时,只是简单的创建一个新的连接。因此这个数据源类比较适合在单元测试或简单的独立应用中使用,因为它不需要添加额外的依赖类。

    <bean id="driverManagerDateSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
            <property name="url" value="jdbc:mysql:///dstest" />
            <property name="username" value="root" />
            <property name="password" value="root"></property>
        </bean>
        <!-- 获取该对象调用execute方法,可以执行sql语句 -->
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <property name="dataSource" ref="driverManagerDateSource"></property>
        </bean>

        4.获取JNDI数据源:

           如果应用部署在高性能的应用服务器上(eg:weblogic、websohere等),我们希望使用应用服务器本身提供的数据源。应用服务器使用JNDI开放调用者使用,Spring专门为此提供引用JNDI资源的JndiObjectFactoryBean类。

    写在最后:本人的第一篇技术博客,留个纪念^_^,如有问题之处,还望多多指正~~感谢大家支持~ 希望以后一起学习,一起进步!

  • 相关阅读:
    angularjs事件通信$on,$emit,$broadcast详解
    es6入门7--Set Map数据结构
    ES6函数参数默认值作用域的模拟原理实现与个人的一些推测
    JS判断数组是否包含某元素
    es6入门6--数组拓展运算符,Array.from()基本用法
    js new一个对象的过程,实现一个简单的new方法
    js中的NaN,isNaN与Number.isNaN的区别,如何判断一个值严格等于NaN
    详解 JDK8 新增的日期时间类
    详解 枚举
    详解 动态代理
  • 原文地址:https://www.cnblogs.com/qianlang/p/10339078.html
Copyright © 2011-2022 走看看