java 数据库常用连接池框架使用 C3P0、proxool

1 篇文章 0 订阅
1 篇文章 0 订阅
网页程序肯定用到数据库,而数据库连接数据量大时肯定创建连接/断开连接要消耗不少系统资源,故一个数据库的连接池很重要。
以.NET里的ado.net框架内置的连接池为例,当第一次连接某个数据库时,以连接字符串里的一些参数为标识,创建一个连接池。
同时打开最小设定的连接数。
    以后使用此连接字符串的sqlconnection都使用此连接池,new 一个sqlconnection对象后open()的时候,其实是去连接池里取得连接,当close()或dispose()的时候归还连接到连接池。若取得连接后不close()或dispose() sqlconnection对象,程序运行时间久了就会造成连接池溢出。
    ado.net是内置连接池的,而java里的jdbc没有。所以找找一些开源的连接池框架吧,于是就记录一下备忘。还没学SSH框架,先不管他。
  首先是C3P0连接池框架
我下的版本是c3p0-0.9.2-pre5
解压后把lib里的c3p0-0.9.2-pre5.jar,mchange-commons-java-0.2.3.jar复制出来。
导入或直接复制到eclipse项目  %web内容文件夹% /WEB-INF/lib  然后就可以直接使用了。
创建2个类吧对这个C3P0稍微封装下吧
package cn.zzy.ModelLayer.DB; 

public class DBconfig { 
public static final String DriverClass = "com.mysql.jdbc.Driver"; 
public static final String jdbcUrl = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8"; 
public static final String user = "zhaozeyang"; 
public static final String password = "xxx"; 

/*the poor size setting only work for C3P0*/ 
public static final int MaxPoolSize = 200; 
public static final int MinPoolSize = 20; 


}

 

package cn.zzy.ModelLayer.DB;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0ConnectionFactory {
	private C3P0ConnectionFactory() {
	}

	private static ComboPooledDataSource ds = null;
	static {
		try {
			ds = new ComboPooledDataSource();
			// 设置JDBC的Driver类
			ds.setDriverClass(DBconfig.DriverClass);
			// 设置JDBC的URL
			ds.setJdbcUrl(DBconfig.jdbcUrl);
			// 设置数据库的登录用户名
			ds.setUser(DBconfig.user);
			// 设置数据库的登录用户密码
			ds.setPassword(DBconfig.password);
			// 设置连接池的最大连接数
			ds.setMaxPoolSize(DBconfig.MaxPoolSize);
			// 设置连接池的最小连接数
			ds.setMinPoolSize(DBconfig.MinPoolSize);
		} catch (PropertyVetoException e) {
			e.printStackTrace();
		}
	}
	public static synchronized Connection getConnection() {
		Connection con = null;
		try {
			con = ds.getConnection();
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
		return con;
	}
	// C3P0 end
}


然后调用C3P0ConnectionFactory里的静态同步方法获取connection 就可以使用了

 

Proxool框架的配置
这个也挺不错,特别还有个sevlet程序可以在线查看连接池的状态
下载解压,用到lib/里的proxool-cglib.jar和proxool-0.9.1.jar
导入或直接复制到eclipse项目  %web内容文件夹% /WEB-INF/lib  然后就可以使用了。
注:我用的时候提示找不到某个类,貌似这个jar包记录日志的时候使用到的apache的某个loging什么的包,commons-logging-1.1.1.jar
可去百度或commons.apache上下载同样方法导入。
首先在项目里WEB-INF文件夹新建proxool.xml文件
内容如下(其他详细属性作用见官方,我不注释去掉了,不知道为什么我加了中文注释被调用的时候就报错)
 
<?xml version="1.0" encoding="UTF-8"?>
	<!--
		the proxool configuration can be embedded within your own
		application's. Anything outside the "proxool" tag is ignored.
	-->
<something-else-entirely>
	<proxool>
		<alias>dbtest</alias>  
		<driver-url>jdbc:mysql://localhost:3306/test?characterEncoding=utf8</driver-url> 
		<driver-class>com.mysql.jdbc.Driver</driver-class>  
		<driver-properties>
			<property name="user" value="zhaozeyang" />  
			<property name="password" value="7443126" /> 
		</driver-properties> 
		 
		<maximum-connection-count>100</maximum-connection-count> 
	 
		<minimum-connection-count>10</minimum-connection-count> 
	 
		<house-keeping-sleep-time>90000</house-keeping-sleep-time>
		 
		<maximum-new-connections>10</maximum-new-connections> 
		 
		<prototype-count>5</prototype-count> 
	 
		<test-before-use>true</test-before-use>
		 
		<house-keeping-test-sql>select * from keepalive</house-keeping-test-sql>
	</proxool>
</something-else-entirely> 

然后配置web.xml  加入以下节点 然后配置web.xml  加入以下节点
 
<!--proxool相关配置开始-->
	<servlet>
  <servlet-name>ServletConfigurator</servlet-name>
  <servlet-class>
    org.logicalcobwebs.proxool.configuration.ServletConfigurator
  </servlet-class>
  <init-param>
    <param-name>xmlFile</param-name>
    <param-value>WEB-INF/proxool.xml</param-value>
  </init-param>
 <load-on-startup>1</load-on-startup>
</servlet>
 
<!--配置对外显示的连接池信息-->
<servlet>
  <servlet-name>proxooladmin</servlet-name>
  <servlet-class>
    org.logicalcobwebs.proxool.admin.servlet.AdminServlet
  </servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>proxooladmin</servlet-name>
  <url-pattern>/proxooladmin</url-pattern>
</servlet-mapping>
<!-- 配置受保护域,只有Tomcat管理员才能察看连接池的信息 -->
<security-constraint>
  <web-resource-collection>
      <web-resource-name>proxool</web-resource-name> 
      <url-pattern>/proxooladmin</url-pattern>
  </web-resource-collection>
  <auth-constraint>
     <role-name>admin</role-name> 
     </auth-constraint>
  </security-constraint>
  
 <login-config>
     <auth-method>BASIC</auth-method> 
     <realm-name>proxool manager Application</realm-name>
      
  </login-config>
  <security-role>
    <description>The role that is required to log in to the Manager Application</description> 
     <role-name>admin</role-name> 
     
 </security-role>
 
 <!--proxool相关配置结束-->
  <error-page>
    <error-code>401</error-code>
    <location>/401.jsp</location>
  </error-page>

然后创建个自定义401错误页面
在上面加入
然后创建个自定义401错误页面
在上面加入
<% 
response.setHeader("WWW-Authenticate", 
"Basic realm=\"Tomcat Manager Application\""); 
%>

这样就保证连接池信息查看的页面帐号密码输错三次才显示401错误信息
查看连接池信息的方法,我在上面设置的servlet Mapping地址
/proxooladmin就是,帐号密码是tomcat的帐号密码。可以去tomcat里的tomcat-users.xml设置,设置的帐号的角色必须符合web.xml里设定的。另外eclipse项目中调试得去eclipse的server管理里的tomcat配置中设置用户信息,eclipse调试其实是拷贝了一份tomcat的配置
一切完毕后就可以用了
获取数据库连接方法
Connection connection = DriverManager.getConnection("proxool.dbtest");dbtest是proxool.xml里设置的数据库别名
然后是连接池情况的servlet测试(不需要就在web.xml删掉就可以)
这样就保证连接池信息查看的页面帐号密码输错三次才显示401错误信息
查看连接池信息的方法,我在上面设置的servlet Mapping地址
/proxooladmin就是,帐号密码是tomcat的帐号密码。可以去tomcat里的tomcat-users.xml设置,设置的帐号的角色必须符合web.xml里设定的。另外eclipse项目中调试得去eclipse的server管理里的tomcat配置中设置用户信息,eclipse调试其实是拷贝了一份tomcat的配置
一切完毕后就可以用了
获取数据库连接方法
Connection connection = DriverManager.getConnection("proxool.dbtest");dbtest是proxool.xml里设置的数据库别名
然后是连接池情况的servlet测试(不需要就在web.xml删掉就可以)
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值