`

C3P0配置与使用以及使用前后的比较

 
阅读更多

一、C3P0配置

1、使用xml方式(名称为c3p0-config.xml)

<?xml version="1.0" encoding="UTF-8"?>

<c3p0-config>

<default-config>

<property name="jdbcUrl">jdbc:mysql://172.26.3.250:3306/csms?useUnicode=true&characterEncoding=utf-8

</property>

<property name="driverClass">com.mysql.jdbc.Driver</property>

<property name="user">root</property>

<property name="password">root</property>

 

<property name="checkoutTimeout">30000</property>

<property name="idleConnectionTestPeriod">30</property>

<property name="initialPoolSize">10</property>

<property name="maxIdleTime">30</property>

<property name="maxPoolSize">100</property>

<property name="minPoolSize">10</property>

<property name="maxStatements">200</property>

</default-config>

</c3p0-config>

2、使用properties方式(名称为c3p0.properties)

c3p0.jdbcUrl=jdbc:mysql://172.26.3.250:3306/csms?useUnicode=true&characterEncoding=utf-8

c3p0.driverClass=com.mysql.jdbc.Driver

c3p0.user=root

c3p0.password=root

 

#连接池中保留的最小连接数

c3p0.minPoolSize=5

#连接池中保留的最大连接数。Default: 15 

c3p0.maxPoolSize=30

#初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 

c3p0.initialPoolSize=10

#最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 

c3p0.maxIdleTime=60

#当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 

c3p0.acquireIncrement=5

#JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements

#属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。

#如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->

c3p0.maxStatements=0

#每60秒检查所有连接池中的空闲连接。Default: 0 -->

c3p0.idleConnectionTestPeriod=60

#定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 

c3p0.acquireRetryAttempts=30

#获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效

#保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试

#获取连接失败后该数据源将申明已断开并永久关闭。Default: false-->

c3p0.breakAfterAcquireFailure=true

#因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的

#时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable

#等方法来提升连接测试的性能。Default: false -->

c3p0.testConnectionOnCheckout=false

 

使用这两种方式进行配置时,只要将配置好的文件放入classpath文件夹下即可,在java代码当中不用显示的给出访问配置方式的代码,c3p0会自动识别!

二、C3P0的使用

C3P0Utils.java:

package com.c3p0.util;

 

import java.sql.Connection;

import java.sql.SQLException;

 

import javax.sql.DataSource;

 

import com.mchange.v2.c3p0.ComboPooledDataSource;

 

public class C3P0Utils {

private static DataSource ds;

 

private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>(); // map

static {

ds = new ComboPooledDataSource();//直接使用即可,不用显示的配置,其会自动识别配置文件

}

 

public static DataSource getDataSource() {

return ds;

}

 

public static Connection getConnection() throws SQLException {

try {

// 得到当前线程上绑定的连接

Connection conn = tl.get();

if (conn == null) { // 代表线程上没有绑定连接

conn = ds.getConnection();

tl.set(conn);

}

return conn;

} catch (Exception e) {

throw new RuntimeException(e);

}

}

 

public static void startTransaction() {

try {

// 得到当前线程上绑定连接开启事务

Connection conn = tl.get();

if (conn == null) { // 代表线程上没有绑定连接

conn = ds.getConnection();

tl.set(conn);

}

conn.setAutoCommit(false);

} catch (Exception e) {

throw new RuntimeException(e);

}

}

 

public static void commitTransaction() {

try {

Connection conn = tl.get();

if (conn != null) {

conn.commit();

}

} catch (Exception e) {

throw new RuntimeException(e);

}

}

 

public static void closeConnection() {

try {

Connection conn = tl.get();

if (conn != null) {

conn.close();

}

} catch (Exception e) {

throw new RuntimeException(e);

} finally {

tl.remove(); // 千万注意,解除当前线程上绑定的链接(从threadlocal容器中移除对应当前线程的链接)

}

}

 

}


三、C3P0使用前后的比较

ConnectionDemo.java:

package com.c3p0;

 

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

 

import com.c3p0.util.C3P0Utils;

 

public class ConnectionDemo {

public static void main(String[] args) throws SQLException {  

       System.out.println("使用连接池................................");  

       for (int i = 0; i < 20; i++) {  

           long beginTime = System.currentTimeMillis();  

           Connection conn = C3P0Utils.getConnection();

           try {  

               PreparedStatement pstmt = conn.prepareStatement("SELECT count(*) as a FROM cs_ms_common_questions");  

               ResultSet rs = pstmt.executeQuery();  

               while (rs.next()) {  

                //TODO

               }  

           } catch (SQLException e) {  

               e.printStackTrace();  

           } finally {  

               C3P0Utils.closeConnection();  

           }  

           long endTime = System.currentTimeMillis();  

           System.out.println("第" + (i + 1) + "次执行花费时间为:" + (endTime - beginTime));  

       }  

 

       System.out.println("不使用连接池................................");  

       for (int i = 0; i < 20; i++) {  

           long beginTime = System.currentTimeMillis();  

           

           try {

Class.forName("com.mysql.jdbc.Driver");

} catch (ClassNotFoundException e1) {

e1.printStackTrace();

}

           Connection conn = DriverManager.getConnection("jdbc:mysql://172.26.3.250:3306/csms?useUnicode=true&characterEncoding=utf-8", "root","root");

           

           try {  

               PreparedStatement pstmt = conn.prepareStatement("SELECT count(*) as a FROM cs_ms_common_questions");  

               ResultSet rs = pstmt.executeQuery();  

               while (rs.next()) {  

                //TODO

               }  

           } catch (SQLException e) {  

               e.printStackTrace();  

           } finally {  

               try {  

                   conn.close();  

               } catch (SQLException e) {  

                   e.printStackTrace();  

               }  

           }  

           long endTime = System.currentTimeMillis();  

           System.out.println("第" + (i + 1) + "次执行花费时间为:"  + (endTime - beginTime));  

       }  

 

   }  

}


最后是控制台输出:
使用连接池................................
第1次执行花费时间为:453
第2次执行花费时间为:16
第3次执行花费时间为:0
第4次执行花费时间为:15
第5次执行花费时间为:16
第6次执行花费时间为:15
第7次执行花费时间为:16
第8次执行花费时间为:0
第9次执行花费时间为:0
第10次执行花费时间为:0
第11次执行花费时间为:0
第12次执行花费时间为:0
第13次执行花费时间为:0
第14次执行花费时间为:0
第15次执行花费时间为:0
第16次执行花费时间为:16
第17次执行花费时间为:0
第18次执行花费时间为:0
第19次执行花费时间为:0
第20次执行花费时间为:0
不使用连接池................................
第1次执行花费时间为:0
第2次执行花费时间为:15
第3次执行花费时间为:16
第4次执行花费时间为:0
第5次执行花费时间为:16
第6次执行花费时间为:0
第7次执行花费时间为:15
第8次执行花费时间为:16
第9次执行花费时间为:0
第10次执行花费时间为:15
第11次执行花费时间为:0
第12次执行花费时间为:16
第13次执行花费时间为:0
第14次执行花费时间为:16
第15次执行花费时间为:15
第16次执行花费时间为:0
第17次执行花费时间为:16
第18次执行花费时间为:0
第19次执行花费时间为:16
第20次执行花费时间为:0

可以看出,在使用连接池时,第一次执行花费的时间稍长,因为第一次初始化操作需要创建多个连接并放入池中,以后使用时将会大大缩短执行时间。 

在不使用连接池时,每次花费的时间都比较长。

分享到:
评论

相关推荐

    c3p0-0.9.0 cglib-2.2 cglib-nodep-2.2

    4. **事务支持**:c3p0可以与JDBC的事务管理机制配合,提供更灵活的事务控制策略。 其次,`cglib-2.2`是CGLIB(Code Generation Library)的一个版本,这是一个Java字节码生成库。它主要用于运行时动态创建类和方法...

    数据库连接池 包含C3P0和Druid.7z

    通过注入数据源,JdbcTemplate可以与C3P0或Druid连接池配合使用。 综上所述,这个资源包提供了一套完整的数据库连接池解决方案,涵盖了C3P0和Druid两种流行的数据库连接池,以及JdbcTemplate工具类,对于Java开发...

    springMVC必须需的jar包(包括C3P0、druid、json、mysql等jar)

    在SpringMVC中,通过配置C3P0数据源,可以有效地管理和优化数据库连接,避免因频繁创建和销毁连接导致的性能问题。 2. **Druid**:Druid是阿里巴巴开源的一个高性能、强大的数据库连接池实现。相比于C3P0,Druid...

    简单的Maven+SSM+MySQL+C3P0+BootStrap 。初次整合完成,学习Git提交github分享.zip

    通过这个项目,你可以学习到如何搭建一个完整的Java Web应用,包括项目的结构规划、配置管理、数据库设计、前后端交互以及版本控制等多方面知识。同时,这个项目也鼓励初学者动手实践,加深对各个技术的理解和运用。

    struts配置的文件 连接池 mysql等配置文件

    例如,使用Apache的DBCP或C3P0库。在`web.xml`或单独的配置文件中设置连接池参数,如数据源、最大连接数、最小连接数、超时时间等。以下是一个DBCP的示例配置: ```xml ``` 6. **MySQL配置**:...

    物流管理系统门户网站和移动端的实现

    标签中提到了"c3p0"和"mysql",这暗示了系统采用了Java作为后端语言,并且使用c3p0作为数据库连接池来管理MySQL数据库的连接。c3p0是一个开源的JDBC连接池,它可以提供更稳定和高效的数据库连接管理,减少资源浪费。...

    商城项目(java)

    在数据库连接方面,项目可能使用了c3p0-config.xml配置文件来设置c3p0数据源。c3p0是一个开源的JDBC连接池,它提供了数据源管理、连接自动获取和释放等功能,提高了数据库操作的效率和稳定性。 【文件名称列表解析...

    spring mvc+hibernate+spring完整配置步骤

    在配置Spring MVC时,我们需要引入相应的库,包括Spring、Spring MVC、Hibernate、数据库驱动、日志库(如log4j)、数据源(如c3p0)等。然后,我们需要在web.xml中配置DispatcherServlet,定义HandlerMapping和...

    jar包所在文件夹

    总结来说,`json-lib jar包`用于处理JSON数据,`mysql驱动jar包`是与MySQL数据库交互的桥梁,而`c3p0 jar包`则为Java应用提供了高效且可配置的数据库连接池。这三个jar包都是Java开发中常见的依赖,对于提升应用功能...

    spring3.1MVC+mybatis3.1框架集成及事务,分页使用

    7. **数据库连接池**:在项目中,通常会使用数据库连接池如Apache DBCP或C3P0来管理和复用数据库连接,提高性能并减少资源消耗。在配置文件中,我们需要设定连接池的相关参数,如最大连接数、最小连接数等。 8. **...

    基于Servlet的用户登录界面

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,提供了更高级的性能和配置选项。通过C3P0,项目可以有效地管理和复用数据库连接,提高系统资源利用率,避免频繁创建和关闭连接带来的性能开销。 同时,项目...

    hibernate-5.2.15. 最新jar包

    1. **对象关系映射**:Hibernate通过XML配置文件或注解将Java类与数据库表进行映射,使得数据库操作可以通过对象的增删改查方法实现,无需编写SQL语句。 2. **Session接口**:作为主要的持久化层接口,Session提供...

    hibernate 配置文件JAR包

    9. **连接池**:为了提高性能,生产环境中通常会结合连接池(如C3P0、HikariCP)使用,以复用数据库连接,减少资源消耗。 10. **事件监听器和拦截器**:Hibernate允许注册事件监听器或拦截器,以在特定操作前后执行...

    struts2 spring ibatis dwr整合配置

    3. 配置数据源:在beans.xml中配置DataSource,如使用DBCP或C3P0连接池。 【iBatis配置】 1. 创建SqlMapConfig.xml,配置iBatis的基本属性,数据库连接信息,以及映射文件的位置。 2. 编写Mapper接口和XML映射...

    往届师兄师姐面试真题收集(Java相关岗位)

    8. **C3P0与JDBC连接**:C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,可以方便地与JDBC一起使用。配置C3P0连接池,然后通过C3P0的工具类获取连接,使用完后再关闭连接,以实现数据库连接的高效复用。 9...

    基于Servlet开发的前后端分离图书管理系统.zip

    可能还涉及到连接池技术,如C3P0或Druid,提高数据库资源的管理和复用。 ### 6. RESTful API设计 为了实现前后端的有效通信,系统可能遵循REST(Representational State Transfer)架构风格设计API。RESTful API以...

    JSP数据库连接池的研究与实现(源代码+论文).zip

    3. 常用数据库连接池组件:详细介绍DBCP和C3P0等库的配置和使用方法,包括初始化参数、连接配置、异常处理等。 4. JSP中集成连接池:讲解如何在JSP应用中引入和配置连接池组件,如何在JSP页面或对应的Servlet中获取...

    Javaweb实验报告.docx

    2. 学会和运用 servlet 技术、log4j 技术、jdom 技术、ifreechart 技术、struts 技术、OGNL 技术、action 对象组织、页面间转接关系、数据连接技术、JDBC 数据库连接技术、DBCP 数据库连接池和 c3p0 连接池连接数据...

Global site tag (gtag.js) - Google Analytics