proxool连接池的一种配置方式

今天看一个旧系统的连接池配置文件,用的Struts1 :

1、在web.xml中配置连接池控制器
<servlet>
	  <servlet-name>poolMonitor</servlet-name>
	  <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
	</servlet>

	<servlet-mapping>
	  <servlet-name>poolMonitor</servlet-name>
	  <url-pattern>/poolMonitor</url-pattern>
	</servlet-mapping>	

2、其它就直接在spring中配置了
<bean id="connectionProvider"		class="com.uncnet.base.database.proxoolsupport.ProxoolConnectionProvider"
		init-method="init">
		<property name="configFile">
			<value>/proxool.xml</value>
		</property>
	</bean>

	<bean id="myDataSource" class="com.uncnet.base.database.ConnectionProviderDataSource">
		<property name="connectionProvider">
			<ref local="connectionProvider" />
		</property>
		<property name="param">
			<value>spring</value><!-- 是指连接池的别名 -->
		</property>
	</bean>


3、在proxool.xml中配置数据库的各种连接参数,和连接池参数,程序员只需调用“myDataSource” 即可。 myDataSource 被放入sessionFactory中注入DAO,也被放入
TransactionManager中用于事务控制。
<alias>spring</alias>
<driver-url>jdbc:oracle:thin:@192.168.5.186:1521:orcl</driver-url> 
		<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
		<driver-properties>
				<property name="user" value="hebxzsp" />
 				<property name="password" value="HeBeXzSP#2015" /> 
		</driver-properties>

<minimum-connection-count>1</minimum-connection-count>
		<maximum-connection-count>20</maximum-connection-count>
		<maximum-connection-lifetime>18000000</maximum-connection-lifetime>  5 hours orcl
		<maximum-active-time>1800000</maximum-active-time> 30 mins 
		<house-keeping-test-sql>values(current TimeStamp)</house-keeping-test-sql>
		<statistics>15m,45m,1d</statistics>
		<statistics-log-level>WARN</statistics-log-level>

		<fatal-sql-exception>Connection is closed,SQLSTATE=08003,Error opening socket. SQLSTATE=08S01,SQLSTATE=08S01</fatal-sql-exception>
		<fatal-sql-exception-wrapper-class>org.logicalcobwebs.proxool.FatalRuntimeException</fatal-sql-exception-wrapper-class>
		<verbose>false</verbose>



看别人介绍的三种常用开源连接池:

为了应用便于移植以及可配置的角度,建议还是使用jndi统一进行连接池的配置。怎么配置其实网上都有很多例子,
这里简单举个例子(使用spring框架):
首先在应用的上下文定义中配置jndi名称,如一个resource.xml文件,里边的写法
    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName"><value>jdbc/myapp</value></property>
    </bean>
注意dataSource这个bean在dao层(hibernate或jdbc)的配置文件里需要作为dataSource名称的属性配置到所有bean中
其中“jdbc/myds”这个就是jndi名称了,下一步就是在应用服务器连接池里进行数据库连接以及对应的jndi配置了

一 开源数据连接池
1 dbcp
dbcp可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和tomcat应用例子都是使用的这个连接池吧。
这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。这个连接池的配置参见附件压缩包中的:dbcp.xml
使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性
有所下降,此外不提供连接池监控

2 c3p0
c3p0是另外一个开源的连接池,在业界也是比较有名的,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。
这个连接池的配置参见附件压缩包中的:c3p0.xml。
使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性相当不错,在大并发量的压力下稳定性也有一定保证,
          此外不提供连接池监控。
         
3 proxool
proxool这个连接池可能用到的人比较少,但也有一定知名度,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。
这个连接池的配置参见附件压缩包中的:proxool.xml。
使用评价:在具体项目应用中,发现此连接池的持续运行的稳定性有一定问题,有一个需要长时间跑批的任务场景任务,同样的代码
在另外2个开源连接池中成功结束,但在proxool中出现异常退出。
但是proxool有一个优势--连接池监控,这是个很诱人的东西,大概的配置方式就是在web.xml中添加如下定义:
    <servlet>
        <servlet-name>admin</servlet-name>
        <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>     
   </servlet>
   <servlet-mapping>
      <servlet-name>admin</servlet-name>
      <url-pattern>/admin</url-pattern>
   </servlet-mapping>  
并在应用启动后访问:http://localhost:8080/myapp/admin这个url即可监控
不过proxool本身的包在监测使用中会有编码问题,附件中有一个
解决此问题的包,参见附件压缩包中的:proxool-0.9.0RC3.jar。另外需要jdk1.5以上的环境。

总结时刻:
综上所述,这几种开源连接池各有优劣,推荐使用c3p0,经检验这种连接池性能稳定,承压能力强。而proxool尽管有明显的性能问题,
但由于它具备监控功能,因此建议在开发测试时使用,有助于确定是否有连接没有被关掉,可以排除一些代码的性能问题。

猜你喜欢

转载自451640893.iteye.com/blog/2305495