在利用spring/ ssh /s2sh / ssi /s2si进行开发的过程中,一般情况下都会在spring的配置文件中进行数据源的配置,为了提高数据源的内存利用效率基本上都是会配置数据源连接池的。
在讲到连接池之前我们先看一下数据源直接连接数据库的配置,以下就是最简单的jdbc直接连接数据库的配置,它不会对我们获取连接、释放连接等进行优化,就和我们直接利用纯jdbc操作数据库一样,每一次的连接数据库、释放数据库连接都会消耗系统资源,如果用户量很大的话,这显然会消耗相当大的资源,所以一般上线运行的系统都是会已连接池的方式来优化处理数据源的。
<!-- 配置数据源dataSource jdbc方式连接数据源 -->
<bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<propertyname="driverClassName"value="oracle.jdbc.driver.OracleDriver"/>
<property name="url"value="jdbc:oracle:thin:@168.9.202.49:1521:TEST" />
<propertyname="username" value="TEST"/>
<propertyname="password" value="TEST"/>
</bean>
下面就来了解一下数据库连接池的配置吧,一般而言,常用的数据库连接池有DBCP,C3P0, proxool,另外还有一个出道迟一些但是性能比前面这3个又一许多的连接池BoneCp。
DBCP是apache组织的一个开源的连接池项目,不过现在好像已经停止维护了,据说问题比较多,连接死锁问题比较严重。
C3P0是hibernate官方指定的数据库连接池工具,性能稳定,不过占用资源相对较多。
Proxool据说性能比从C3P0好一些,消耗资源也少。
BoneCp连接池网上有测试数据显示其运行效率可以达到C3P0、Proxool的25倍,并且稳定性也不错,所以被许多开发者推崇!但是要求jdk1.5+。
只可惜我的开发环境是基于jdk1.4的,所以对BoneCp无法测试了。
Proxool也没有测试,因为现在基本都是新的基于jdk1.5+的版本,有些版本说支持jdk1.4,但实际上好像是在jdk1.5+以后的版本编译打包的,配置测试没有通过。
下面我就给出spring中连接池的配置吧!
测试通过的连接池配置:
Dbcp:
<!-- 配置数据源dataSource dbcp连接池方式连接数据源 -->
<bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource">
<propertyname="url"
value="jdbc:oracle:thin:@168.9.202.49:1521:TEST"/>
<propertyname="driverClassName"value="oracle.jdbc.driver.OracleDriver" />
<propertyname="username" value="TEST" />
<propertyname="password" value="TEST" />
<property name="initialSize"value="1"/>
<propertyname="maxActive" value="500"/>
<propertyname="maxIdle" value="2"/>
<propertyname="minIdle" value="1"/>
</bean>
C3P0:
<!-- 配置数据源dataSourceC3P0连接池方式连接数据源 -->
<beanid="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close">
<propertyname="driverClass" value="oracle.jdbc.OracleDriver"/>
<propertyname="jdbcUrl" value="jdbc:oracle:thin:@168.9.202.49:1521:TEST"/>
<propertyname="user" value="TEST" />
<propertyname="password" value="TEST" />
<propertyname="acquireIncrement" value="5" />
<propertyname="acquireRetryAttempts" value="10" />
<propertyname="acquireRetryDelay" value="3000" />
<propertyname="autoCommitOnClose" value="true" />
<propertyname="breakAfterAcquireFailure" value="false"/>
<propertyname="checkoutTimeout"value="10000" />
<propertyname="initialPoolSize"value="6" />
<propertyname="maxIdleTime" value="10000" />
<propertyname="maxPoolSize" value="10" />
<propertyname="minPoolSize" value="1" />
<propertyname="maxStatements" value="0" />
<propertyname="numHelperThreads"value="3" />
<propertyname="propertyCycle" value="600" />
<propertyname="maxStatementsPerConnection" value="0" />
</bean>
测试未通过:我相信这并不是配置的问题,因为没有找到适合于jdk1.4的版本。
Proxool:
<!-- 配置数据源dataSourceproxool连接池方式连接数据源 -->
<bean id="dataSource"class="org.logicalcobwebs.proxool.ProxoolDataSource"destroy-method="close">
<propertyname="driver" value="oracle.jdbc.driver.OracleDriver"></property>
<propertyname="driverUrl" value="jdbc:oracle:thin:@168.9.202.49:1521:TEST"></property>
<propertyname="user" value="TEST"></property>
<propertyname="password" value="TEST"></property>
<propertyname="alias" value="proxool4JMJL"></property>
<propertyname="jmx" value="false"></property>
<propertyname="trace" value="true"></property>
<propertyname="verbose" value="false"></property>
<propertyname="houseKeepingSleepTime"value="30000"></property>
<propertyname="houseKeepingTestSql" value="SELECTCURRENT_DATE FROM DUAL"></property>
<propertyname="testBeforeUse" value="true"></property>
<propertyname="testAfterUse" value="true"></property>
<propertyname="prototypeCount" value="5"></property>
<propertyname="maximumConnectionCount"value="400"></property>
<propertyname="minimumConnectionCount"value="10"></property>
<propertyname="statistics" value="1m,15m,1d"></property>
<propertyname="statisticsLogLevel" value="ERROR"></property>
<propertyname="maximumActiveTime" value="600000"></property>
<propertyname="simultaneousBuildThrottle" value="1600"></property>
</bean>
没有测试:
Bonecp:
<!-- 配置数据源dataSourcebonecp连接池BoneCP官方明确指出要求jdk 1.5+ -->
<bean id="bonecpDataSource"class="com.jolbox.bonecp.BoneCPDataSource"destroy-method="close">
<propertyname="driverClass" value=" oracle.jdbc.driver.OracleDriver " />
<propertyname="jdbcUrl" value=" jdbc:oracle:thin:@168.9.202.49:1521:TEST" />
<propertyname="username" value="TEST"/>
<propertyname="password" value="TEST"/>
<propertyname="idleConnectionTestPeriod" value="60"/>
<propertyname="idleMaxAge" value="240"/>
<propertyname="maxConnectionsPerPartition" value="30"/>
<propertyname="minConnectionsPerPartition" value="10"/>
<propertyname="partitionCount" value="3"/>
<propertyname="acquireIncrement" value="5"/>
<propertyname="statementsCacheSize" value="100"/>
<propertyname="releaseHelperThreads" value="3"/>
</bean>
以上是4种连接池的配置,如果你的开发环境是基于jdk1.5+的(现在基本上都是在jdk1.5+环境下开发了,像我的这种jdk1.4是属于10年前的古董了,局限性很大,许多java的新特性不能用到,感觉有时候真实被束缚住手脚了,不过没办法,这是公司的要求),那么配置那些东西都是不难的!
注意:配置数据库连接池需要把连接池的jar包放在项目的classpath(一般就放在lib下了)下一份,tomcat(我用的tomcat5.0,如果是其它的web容器那你自己试吧)的common\lib下一份,必须两者都放入jar包才可正常运行,否则那就 … …