`
bjtale
  • 浏览: 29350 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

c3p0连接池使用

阅读更多

      在实际开发中,使用JDBC连接数据库的情况时有出现,在多层结构的应用中,使用DriverManager获取连接时,一个需要连接的操作对应一个数据库物理连接,每一次操作都会重新打开一个连接,在使用完毕后立即关闭。而频繁打开、关闭连接会造成系统及其不稳定,并发操作时经常会出现连接不足甚至是根本无法获取连接的情况。

      c3p0连接池很好地解决了这个问题,解决思路是:在应用程序启动时,即建立足够的数据库连接用于待命,并将这些连接存放在池中等待使用。每次其它服务请求数据库连接时,不需要重新打开数据库连接,而是从池中取出已有的连接,使用完毕后,这个连接也不会被关闭,而是重新放入连接池。JDBC2.0引入了数据库连接池技术以解决共享连接问题,使用java.sql.DataSource接口实现,而c3p0是一个开源的实现,商用服务器也提供连接池实现(如WebLogic、WebSphere)。

      本文使用一个工具类来读取配置文件,具体代码如下:

package com.any.util;

import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Locale;
import java.util.ResourceBundle;

/** 
 * @ClassName: ConfigUtil 
 * @author Helen
 * @date 2015年8月13日 上午10:46:39  
 */

public class ConfigUtil {
	private String resourcePath = "com.any.config";
	private ResourceBundle bundle;
	private ArrayList<String> keyList;
	
	private ConfigUtil(){
		loadFile();
	}
	public static ConfigUtil getInstanceConfig(){
		return new ConfigUtil();
	}
	protected void loadFile(){
		bundle = ResourceBundle.getBundle(resourcePath, Locale.CHINA);
		if(bundle!=null){
			Enumeration<String> eumObj = bundle.getKeys();
			keyList = new ArrayList<String>();
			while (eumObj.hasMoreElements()) {
				keyList.add(eumObj.nextElement());
			}
		} else {
			System.out.println("Config file not exists!");
			System.exit(2);
		}
	}
	private boolean isKeyExists(String key){
		return keyList.contains(key);
	}
	public String getString(String key){
		if(isKeyExists(key)){
			return bundle.getString(key);
		}
		return null;
	}
	public int getInt(String key){
		if(isKeyExists(key)){
			return Integer.valueOf(bundle.getString(key));
		}
		return 0;
	}
}

     该工具类仅用于从properties文件中读取数据,该文件中通常会存放应用系统的常用配置参数:如数据库信息、资源路径信息、国际化资源等。使用C3P0获取连接池的关键代码如下:

package com.any.util;

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/** 
 * @ClassName: DBPool 
 * @author Helen
 * @date 2015年8月13日 上午10:19:44  
 */

public class DBPool {
	public static Connection getConnection(){
		ComboPooledDataSource ds = new ComboPooledDataSource();
		ConfigUtil config = ConfigUtil.getInstanceConfig();
		try {
			ds.setDriverClass("com.mysql.jdbc.Driver");
			ds.setJdbcUrl(config.getString("url"));
			ds.setUser(config.getString("user"));
			ds.setPassword(config.getString("password"));
			ds.setMaxPoolSize(60);
			ds.setMinPoolSize(3);
			ds.setInitialPoolSize(10);
			ds.setMaxStatements(200);
			return ds.getConnection();
		} catch (PropertyVetoException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
}

      注意,需要引入C3P0对应版本的jar包,通过设置最大连接数、最小连接数等,即可创建一个连接池,C3P0还能很好地管理连接池,也能自动清理不再使用的Statement和ResultSet。

      使用以下代码测试:

package com.any;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.any.util.DBPool;

/** 
 * @ClassName: TestPool 
 * @Description: (这里用一句话描述这个类的作用) 
 * @author Helen
 * @date 2015年8月13日 上午10:30:43  
 */

public class TestPool {
	public static void main(String[] args) {
		Connection conn = DBPool.getConnection();
		try {
			PreparedStatement psmt=conn.prepareStatement("select * from emp");
			ResultSet rs = psmt.executeQuery();
			while(rs.next()){
				System.out.println("result:"+rs.getString("ename"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
}

     由于引入了日志组件,因此运行时可以看到控制台打印出的如下日志信息:

八月 13, 2015 11:05:48 上午 com.mchange.v2.log.MLog <clinit>
INFO: MLog clients using java 1.4+ standard logging.
八月 13, 2015 11:05:48 上午 com.mchange.v2.c3p0.C3P0Registry banner
INFO: Initializing c3p0-0.9.1.2 [built 21-May-2007 15:04:56; debug? true; trace: 10]
八月 13, 2015 11:05:48 上午 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
INFO: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 1hge48x9ba9sf7i1qnzmj8|4544c134, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge48x9ba9sf7i1qnzmj8|4544c134, idleConnectionTestPeriod -> 0, initialPoolSize -> 10, jdbcUrl -> jdbc:mysql://127.0.0.1:3306/test, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 60, maxStatements -> 200, maxStatementsPerConnection -> 0, minPoolSize -> 3, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]
result:abc

 

分享到:
评论

相关推荐

    c3p0连接池使用所需jar包

    下面我们将详细探讨C3P0连接池的使用以及所需的jar包。 首先,C3P0连接池的主要功能包括: 1. **连接管理**:C3P0可以自动创建、测试、回收和关闭数据库连接,避免了手动管理连接的繁琐工作,降低了系统资源的消耗...

    day18 17.c3p0连接池使用

    在本教程中,我们将深入探讨“day18 17.c3p0连接池使用”的相关知识点,包括C3P0的基本概念、配置、优势以及如何在实际项目中应用。 首先,理解C3P0的核心功能。C3P0连接池的主要任务是管理和复用数据库连接,避免...

    c3p0连接池使用方法.rar_连接池实现

    **c3p0连接池使用方法** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。使用c3p0连接池可以有效地管理和优化数据库连接,提高系统的性能和稳定性。以下是关于c3p0连接池...

    C3P0连接池配置需要的jar包

    C3P0连接池是Java应用中常用的数据库连接池组件,它允许程序在不关闭物理连接的情况下,管理和重用数据库连接,从而提高了应用程序的性能和效率。C3P0库依赖于其他几个JAR包来实现其功能,包括`c3p0-0.9.2.1.jar`、`...

    c3p0连接池jar包

    4. **C3P0使用**: - 添加依赖:在项目中引入C3P0的JAR包,如`lib/c3p0-*.jar`,同时可能需要包含其他的依赖,如`lib/mchange-commons-java-*.jar`。 - 创建数据源:通过`...

    C3P0连接池jar包(正式).zip

    1. **连接池管理**:C3P0可以创建并维护一定数量的数据库连接,当应用程序需要时,可以从连接池中获取连接,用完后归还,而不是每次使用都创建新的连接,这大大减少了数据库连接的创建和销毁开销。 2. **自动检测与...

    C3P0 连接池源码

    C3P0数据库连接池是Java开发中广泛使用的开源组件,用于管理数据库连接,提高数据库访问效率并降低系统资源消耗。源代码分析可以帮助我们深入理解其内部机制,从而更好地优化和配置C3P0,提升应用程序性能。 1. **...

    c3p0连接池工具

    总之,c3p0连接池是Java应用中管理数据库连接的有效工具,通过合理配置和使用,可以显著提高系统的运行效率和稳定性。在实际开发中,应结合具体项目需求选择合适的连接池,并进行持续监控和优化。

    C3P0连接池管理类

    在Java应用中,尤其是在Web应用中,频繁的数据库连接创建和关闭会消耗大量的系统资源,而通过使用C3P0这样的连接池,可以预先配置并创建一定数量的数据库连接,供多个请求共享,从而减少了数据库连接的创建和销毁...

    C3P0连接池配置

    **C3P0连接池配置详解** C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的主要特点是轻量级、高效且稳定,广泛应用于各种Java Web应用中。在本文中,我们将深入探讨...

    C3P0数据库连接池

    C3P0数据库连接池和jar包,因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒),连接就会被自动释放掉。而每次新建连接都需要140毫秒左右的时间,所以耗费时间比较多。若使用C3P0连接池来池化...

    c3p0连接池配置使用

    **c3p0连接池配置使用** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。使用c3p0连接池可以有效地管理和优化数据库连接,提高系统的性能和稳定性。下面将详细介绍c3p0的...

    c3p0连接池

    `c3p0-0.9.1.2.jar`是C3P0的jar包文件,包含了C3P0的所有类和方法,导入此库后,我们可以在项目中直接使用C3P0连接池。 C3P0的官方开发文档详细介绍了C3P0的配置、使用方法、API接口及常见问题解答,对于开发者来说...

    JDBC中C3p0连接池使用方法 (个人总结综合教程,适合新入门的朋友阅读)

    JDBC中C3p0连接池使用方法 (个人总结综合教程,适合新入门的朋友阅读)

    c3p0连接池JAR包

    c3p0连接池JAR包c3p0连接池JAR包c3p0连接池JAR包c3p0连接池JAR包c3p0连接池JAR包

    c3p0连接池插件

    总之,c3p0作为一款成熟的数据库连接池,通过合理的配置和使用,可以在保证应用性能的同时,有效地管理和维护数据库连接,降低资源消耗。在实际项目中,选择适合的连接池需要综合考虑项目的特性和需求。

Global site tag (gtag.js) - Google Analytics