欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring整合常用连接池

程序员文章站 2022-05-24 12:28:49
...

一  整合阿里巴巴Druid

测试环境:  mysql5.5      druid-1.0.9.jar

编写druid.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/studentdb
theUser=root
password=test123
#配置监控统计拦截的filters,去掉后监控界面sql无法统计
filters=stat
#配置初始化大小 
initialSize=6
#配置初始化最大连接数 
maxActive=20
#配置初始化最小连接数 
minIdle=3
#配置获取连接等待超时的时间,1分钟 
maxWait=60000
#检测连接是否有效的SQL 
validationQuery=SELECT 'x'
#空闲的连接是否进行有效性检查
testWhileIdle=true
#申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 
testOnBorrow=false
#归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 
testOnReturn=false
#启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true 
maxPoolPreparedStatementPerConnectionSize=20
#对于长时间不使用的连接强制关闭 
removeAbandoned=true
#超过60秒的空闲连接就可以被关闭了,单位是秒 
removeAbandonedTimeout=60
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 
timeBetweenEvictionRunsMillis=10000
#配置一个连接在池中最小生存的时间,单位是毫秒 
minEvictableIdleTimeMillis=30000

在spring中集成

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	                    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	                    http://www.springframework.org/schema/aop
	                    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	                    http://www.springframework.org/schema/tx
	                    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
	<!-- 导入其它sping配置文件 -->
	<import resource="classpath:configs/spring/context-*.xml"/>
	<!-- durid连接池配置start -->
	<bean id="duridConfig" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
		<property name="locations">
		    <list>
				<value>classpath:configs/druid.properties</value>
			</list>
		</property>
    </bean>
   <!--druid数据源-->
    <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource" 
		init-method="init" destroy-method="close">
		<property name="driverClassName" value="${driverClassName}" />
		<property name="url" value="${url}" />
		<property name="username" value="${theUser}" />
		<property name="password" value="${password}" />
		<property name="filters" value="${filters}" />
		<property name="initialSize" value="${initialSize}" />
		<property name="maxActive" value="${maxActive}" />
		<property name="minIdle" value="${minIdle}" />
		<property name="maxWait" value="${maxWait}" />
		<property name="validationQuery" value="${validationQuery}" />
		<property name="testWhileIdle" value="${testWhileIdle}" />
		<property name="testOnBorrow" value="${testOnBorrow}" />
		<property name="testOnReturn" value="${testOnReturn}" />
		<property name="maxPoolPreparedStatementPerConnectionSize" value="${maxPoolPreparedStatementPerConnectionSize}" />
		<property name="removeAbandoned" value="${removeAbandoned}" />
		<property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}" />
		<property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}" />
		<property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}" />
	</bean>
    <!-- durid连接池配置end -->
    
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="druidDataSource"></property>
		<property name="configLocation">
			<value>classpath:configs/hibernate.cfg.xml</value>
		</property>
		<property name="mappingLocations">
			<list>
				<value>classpath:configs/mappers/*.hbm.xml</value>
			</list>
		</property>
	</bean>
	
</beans>

前台监控配置,  在web.xml中

<!-- druid pool -->
  <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>
  <!--http://localhost:8080/SSHFinal/druid/index.html  -->

二  整合C3P0

测试环境:  mysql5.5      c3p0-0.9.5.2.jar     mchange-commons-java-0.2.11.jar

编写c3p0.properties

jdbcUrl=jdbc:mysql://localhost:3306/schooldb?useUnicode=true&characterEncoding=utf-8
driverClass=com.mysql.jdbc.Driver
theuser=root
password=test123
#初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3
initialPoolSize=6
#连接池中保留的最小连接数。Default: 3
minPoolSize=3
#连接池中保留的最大连接数。Default: 15
maxPoolSize=5
#当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 
acquireIncrement=3
#控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0
maxStatements=8
#maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0
maxStatementsPerConnection=5
#最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0
maxIdleTime=1800

在spring里面整合

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	 http://www.springframework.org/schema/aop
	 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	 http://www.springframework.org/schema/tx
	 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	 http://www.springframework.org/schema/context
	 http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	 
   <import resource="classpath:configs/spring/applicationContext-*.xml"/>
    
   <context:property-placeholder location="classpath:configs/c3p0.properties" />
<!--	<bean id="config" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">-->
<!--		<property name="location">-->
<!--			<value>classpath:configs/c3p0.properties</value>-->
<!--		</property>-->
<!--	</bean>-->
    <!-- 配置数据库连接池(c3p0) -->
    <bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 基本信息 -->
        <property name="jdbcUrl" value="${jdbcUrl}"></property>
        <property name="driverClass" value="${driverClass}"></property>
        <property name="user" value="${theuser}"></property>
        <property name="password" value="${password}"></property>
        <!-- 其他配置 -->
        <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
        <property name="initialPoolSize" value="${initialPoolSize}"></property>
        <!--连接池中保留的最小连接数。Default: 3 -->
        <property name="minPoolSize" value="${minPoolSize}"></property>
        <!--连接池中保留的最大连接数。Default: 15 -->
        <property name="maxPoolSize" value="${maxPoolSize}"></property>
        <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
        <property name="acquireIncrement" value="${acquireIncrement}"></property>
        <!-- 控制数据源内加载的PreparedStatements数量。
                            如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
        <property name="maxStatements" value="${maxStatements}"></property>
        <!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
        <property name="maxStatementsPerConnection" value="${maxStatementsPerConnection}"></property>
        <!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
        <property name="maxIdleTime" value="${maxIdleTime}"></property>
    </bean>

	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="c3p0DataSource"></property>
		<property name="configLocation">
			<value>classpath:configs/hibernate.cfg.xml</value>
		</property>
		<property name="mappingLocations">
			<list>
				<value>classpath:com/obtk/entitys/*.hbm.xml</value>
			</list>
		</property>
	</bean>
	
	
</beans>

三  整合proxool

环境  mysql5.5   proxool-0.9.1.jar   proxool-cglib.jar

编写proxool.properties属性文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/studentdb?autoReconnect=true
theuser=root
password=test123
#最大的数据库连接数.默认是15
maximumConnectionCount=100
#最小的数据库连接数,默认是5
minimumConnectioncount=7
#最大活跃时间,如果一个线程活动时间超过这个数值,线程会被杀死 
maximumActiveTime=300000
#连接池使用状况统计。 参数“10s,1m,1d”
statistics=1m,15m,1d
#检查连接的有效性sql
houseKeepingTestSql=select CURRENT_DATE

和spring整合

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	 http://www.springframework.org/schema/aop
	 http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	 http://www.springframework.org/schema/tx
	 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	 http://www.springframework.org/schema/context
	 http://www.springframework.org/schema/context/spring-context-3.0.xsd">
	 
   <import resource="classpath:configs/spring/applicationContext-*.xml"/>
    
   <context:property-placeholder location="classpath:configs/proxool.properties" />
   <!-- 配置数据库连接池(c3p0) -->
    <bean id="proxoolDataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
        <!-- 基本信息 -->
        <property name="driverUrl" value="${url}"></property>
        <property name="driver" value="${driverClassName}"></property>
        <property name="user" value="${theuser}"></property>
        <property name="password" value="${password}"></property>
        <!-- 最大的数据库连接数.默认是15 -->
        <property name="maximumConnectionCount" value="${maximumConnectionCount}"></property>
        <!-- 最小的数据库连接数,默认是5 -->
        <property name="minimumConnectionCount" value="${minimumConnectioncount}"></property>
        <!-- 最大活跃时间,如果一个线程活动时间超过这个数值,线程会被杀死 -->
        <property name="maximumActiveTime" value="${maximumActiveTime}"></property>
        <!-- 连接池使用状况统计。 参数“10s,1m,1d” -->
        <property name="statistics" value="${statistics}"></property>
        <!-- 检查连接的有效性 -->
        <property name="houseKeepingTestSql" value="${houseKeepingTestSql}"></property>
    </bean>

	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="proxoolDataSource"></property>
		<property name="configLocation">
			<value>classpath:configs/hibernate.cfg.xml</value>
		</property>
		<property name="mappingLocations">
			<list>
				<value>classpath:com/obtk/entitys/*.hbm.xml</value>
			</list>
		</property>
	</bean>
</beans>

前台监控配置

<!-- proxool连接池的配置start -->
  <servlet>
  	<servlet-name>proxool</servlet-name>
  	<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>proxool</servlet-name>
  	<url-pattern>/proxool.wps</url-pattern>
  </servlet-mapping>
   <!-- proxool连接池的配置end -->