spring配置详解-连接池配置(转载)

一、连接池概述
 数据库连接池概述:
  数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个
应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。
  数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时
间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
  数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些
数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接
数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。 数据库连接池的最小连接数和最大连接数的设
置要考虑到下列几个因素:
  1) 最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
  2) 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之
后的数据库操作。
  3) 如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库
连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
目前常用的连接池有:C3P0、DBCP、Proxool

网上的评价是:
C3P0比较耗费资源,效率方面可能要低一点。
DBCP在实践中存在BUG,在某些种情会产生很多空连接不能释放,Hibernate3.0已经放弃了对其的支持。
Proxool的负面评价较少,现在比较推荐它,而且它还提供即时监控连接池状态的功能,便于发现连接泄漏的情况。

配置如下:
1、在spring配置文件中,一般在applicationContext.xml中
    
           
           
           
           
           
          
           
            
           
           
           
            
           
           
           
           
           
           
           
           
           
            
           
           
    

     然后注入到sessionFactory中
    
          
    

 
Porxool 配置文件
--==--==--==--==--====--==--==--==--==--==--==


      WMS
      jdbc:postgresql://192.168.210.184:5432/wms
      org.postgresql.Driver
     
            
            
     

      2
      40
      20
      2
      select CURRENT_DATE

--==--==--==--==--====--==--==--==--==--==--==
 
配置说明:
alias                                          -〉数据库连接别名(程序中需要使用的名称)
driver-url                                   -〉数据库驱动
driver-class                                -〉驱动程序类
driver-properties                        -〉联机数据库的用户和密码
minimum-connection-count          -〉最小连接数量,建议设置0以上,保证第一次连接时间
maximum-connection-count         -〉最大连接数量,如果超过最大连接数量则会抛出异常。连接数设置过多,服务器CPU和内存性能消耗很
大。
simultaneous-build-throttle          -〉同时最大连接数
prototype-count                          -〉一次产生连接的数量。
                                                 例:如果现在prototype-count设置为4个,但是现在已经有2个可以获得的连接,那么
将会试图再创建2个连接。
                                                  但不能超过最大连接数。
maximum-active-time                 -〉连接最大时间活动 默认5分钟

maximum-connection-lifetime      -〉连接最大生命时间 默认4小时



最近遇到了一个奇怪的问题,使用了Apache的连接池,当数据库重启之后,就无法连接到数据库上了,开始以为是程序的问题,看了一些代码,无用。后经同事提示,在连接池的配置中加了一项:


validationQuery
SELECT 1

就Ok了,才明白这个是用来检查连接的,当访问量不大时,连接池中的连接足够用,它不会去申请新的连接,但原有的连接已经被重置了,也就是reset了,无法使用,因此对于使用连接池,应该加上面的配置,以检查数据库连接。

同样,使用spring来配置连接池的时候也应该加上:


SELECT 1

防止数据库重新启动后出现问题。

spring下的各种连接池的比较

hibernate开发组推荐c3p0,spring开发组推荐dbcp,但是dbcp连接池有weblogic连接池同样的问题,就是强行关闭连接或数据库重启后,无法reconnect ,告诉连接被重置,这个设置可以解决。hibernate in action推荐c3p0和proxool。
我推荐proxool,因为他不但可以监控后台。还可以有效的释放连接。在connection close时,也就是归还connection,

关闭所有的statement,并且判断是否autocommit,如果不行,就rollback,并且设置true,
可以参考proxool的org.logicalcobwebs.proxool.ConnectionResetter类
connection pool把connection reset置回initial state。
dbcp的配置







SELECT 1


true



c3p0的配置, 注意是''driverClass' , 'jdbcUrl', 'user' , 'password'


        
        net.sourceforge.jtds.jdbc.Driver
        

        

jdbc:jtds:sqlserver://localhost:1433/hua
        

        
        sa
        

        
        hua
        

        
        15
        

        
        5
        

        
        25
        

        




        destroy-method="close">
        
            ${db.driverClass}
        

        
            ${db.url}
        

         
        
            
                5
                100
                100
                0
                10
                ${db.user}
                ${db.pass}
            

        

   

xapool的配置

   
      
        com.mysql.jdbc.Driver
        jdbc:mysql://localhost/dbname
      

   

    root
    mypass
    1
    5
    select 1
  

c-jdbc的配置

    jdbc:cjdbc://127.0.0.1:25322/vdb?user=vuser
  


weblogic的连接池解决办法:Test Reserved Connections: 如果选择了这个选项,服务器会在把连接提供给客户端之前
对其进行测试。 Test Created Connections: 如果选择了这个选项,就会在创建一个JDBC
连接之后和在把它添加到JDBC连接池中的可用连接列表之前,对该JDBC连接进行测试。

tomcat的jndi关于dbcp的配置:


         factory
         org.apache.commons.dbcp.BasicDataSourceFactory
      

      
         driverClassName
         com.sybase.jdbc2.jdbc.SybDriver
      

      
         url
         xyz
      

      
         username
         xyz
      

      
         password
         xyz
      

      
         maxActive
         5
      

      
         maxIdle
         5
      

      
         maxWait
         -1
      

      
         removeAbandoned
         true
      

      
         validationQuery
         select count(*) from sometable where 1 = 0
      

      
         testOnBorrow
         true
      



你可能感兴趣的:(框架)