• 初始C3P0连接池


    C3P0连接池只需要一个jar包:

    其中我们可以看到有三个jar包;

    属于C3P0的jar包只有一个,另外两个是测试时使用的JDBC驱动:一个是mysql的,一个是oracle的;

    可以看到在src下我们有一个xml文件,在C3P0中我们可以通过xml配置参数,同样也可以像DBCP中使用properties文件,但是properties文件中只能写一个数据库连接,xml配置就更为灵活了,可以写多个连接(可选的)后面有案例。

    普通连接:

    package c3p0;
    
    import java.sql.Connection;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    /**
     * 使用C3P0连接池
     * @author mzy
     * 
     * 每一个连接池可以配置的参数是很多的;
     * 但是我们举例使用的都是一些简单的配置,
     * 我们配置的越多,使用起来就越灵活!	
     */
    public class Demo01 {
    	private static String url="jdbc:mysql://localhost:3306/test";
    	private static String user="root";
    	private static String password="123456";
    	private static String driverClass="com.mysql.jdbc.Driver";
    	
    	public static void main(String[] args) throws Exception {
    		// 1) 创建连接池对象
    		ComboPooledDataSource cds = new ComboPooledDataSource();
    		
    		// 2) 设置连接参数
    		cds.setJdbcUrl(url);
    		cds.setUser(user);
    		cds.setPassword(password);
    		cds.setDriverClass(driverClass);
    		
    		// 3) 设置连接池相关的参数
    		cds.setInitialPoolSize(5); // 初始化连接数
    		cds.setMaxPoolSize(10); // 最大连接数
    		cds.setCheckoutTimeout(3000); // 最大等待时间
    		cds.setMinPoolSize(3); // 设置最小连接数
    		/*
    		 * 最小连接数适用的场景;
    		 * 在高峰期之后,连接池中的连接数从初始化的5个
    		 * 变成了最大连接数的10个;
    		 * 但是当低峰期到来的时候,根本使用不到那么多连接;
    		 * 这个时候就需要最小连接数来控制最少的连接数了。
    		 */
    		// 4) 获取连接
    		for(int i=1; i<=11; i++) {
    			Connection conn = cds.getConnection();
    			System.out.println(conn); // 代理的connection
    			// 红色的是C3P0软件的日志信息!
    			
    			// 关闭第3个
    			if(i == 3) {
    				conn.close(); // 因为这些连接池
    			}
    		}
    	}
    }
    

    使用加载配置文件(c3p0-config.xml:名字是固定的,不可更改)

    c3p0-config.xml:中的内容

    <c3p0-config>
    	<!-- 默认配置 -->
      <default-config>
      		<!-- 连接参数 -->
        	<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
        	<property name="user">root</property>
        	<property name="password">123456</property>
        	<property name="driverClass">com.mysql.jdbc.Driver</property>
        	
        	<!-- 连接池参数 -->
        	<property name="initialPoolSize">5</property>
        	<property name="maxPoolSize">12</property>
        	<property name="checkoutTimeout">5000</property>
        	<property name="minPoolSize">3</property>
    
      </default-config>
    
    	<!-- 命名配置 -->
      <named-config name="oracle">
       		 <!-- 连接参数 -->
        	<property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:xe</property>
        	<property name="user">mzy</property>
        	<property name="password">123456</property>
        	<property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
        	
        	<!-- 连接池参数 -->
        	<property name="initialPoolSize">5</property>
        	<property name="maxPoolSize">12</property>
        	<property name="checkoutTimeout">5000</property>
        	<property name="minPoolSize">3</property>
       </named-config>
    
    
    </c3p0-config>
    

    使用了配置文件之后,使用c3p0连接池,当你设置连接参数的时候,它会自动去配置文件中读取,不需要有额外操作!

    使用读取配置文件的方式进行初始化连接池:

    package c3p0;
    
    import java.sql.Connection;
    import java.sql.SQLException;
    
    import com.mchange.v2.c3p0.ComboPooledDataSource;
    
    /**
     * 同样适用配置文件的方式;
     * 不用硬编码
     * 
     * 这里也可以使用properties的形式;但是properties不如xml灵活!
     * 比如如果我们要有多个数据库可选(不同的数据库产品)
     * 使用properties的话,我们必须一个数据库一个properties;
     * 不够灵活,所以在C3P0中我们建议使用xml的方式!
     * 
     * @author mzy
     *
     */
    public class Demo02 {
    	/**
    	 * 使用xml配置文件,需要注意:
    	 * 		1) 需要把一个名为c3p0-config.xml文件放到src目录下,c3p0会自动读取。
    	 * <c3p0的读取机制:
    	 * 		1.在普通java项目下,是在bin目录下找
    	 * 		2.在web项目下,是在WEB-INF/classes/下找
    	 * 但是因为在普通java项目下,bin目录是原封不动的拷贝src中的(除.java文件编译成.class文件)
    	 * 在web项目下,所有src中的文件也同上拷贝进WEB-INF/classes中
    	 * 所以我们只用把 c3p0-config.xml直接拷贝到src下就可以了!
    	 * >
    	 * @throws SQLException 
    	 */
    	public static void main(String[] args) throws SQLException {
    		/**
    		 * 1) new ComboPooledDataSource():
    		 * 		使用这种没有参数的构造方法,读取的是default-config的配置信息。
    		 * 
    		 * 2) new ComboPooledDataSource("name"):
    		 * 		使用有参的构造方法,读取的是name-config配置信息。
    		 */
    		// 1) 创建连接池对象
    		// ComboPooledDataSource cds = new ComboPooledDataSource();
    		ComboPooledDataSource cds = new ComboPooledDataSource("oracle");
    		
    		//2) 获取连接
    		for(int i=1;i<=13;i++){
    			Connection conn = cds.getConnection();
    			System.out.println(conn);
    			
    			//关闭第3个
    			if(i==3){
    				conn.close();//本质是把连接对象放回连接池中
    			}
    		}
    		
    	}
    }
  • 相关阅读:
    ByteArrayInputStream(字节数组输入流) 示例
    ASP.NET 页面对象模型
    HTML常用标记
    [elementui]上线iconfont乱码
    time与timeEnd测试运行时间
    放大镜效果
    canvas
    [css] 样式列表
    千分符
    centos源失败
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053469.html
Copyright © 2020-2023  润新知