jsp_连接池

来源:互联网 发布:双十一店铺数据分析 编辑:程序博客网 时间:2024/05/29 07:51
1: 连接池(DBCP与C3p0)    1): 之前的连接操作        拿到一个连接--->执行sql进行数据操作--->关闭连接        ps: 这样的话存在一些缺点的,比如每拿到一个连接用完后则就把这个连接关闭了,这很浪费,毕竟拿到一个连接等是需要时间的            这样也不能很好的对连接数进行控制 ,如果连接数过多的话,则可能会有内存泄漏服务器崩溃    2): 连接池        连接池则在创建一个数据库连接的缓冲池,在这个缓冲池创建时则可以在里边初始化一定的连接数,如需要获取连接时,则只需要到这个缓冲池中获取就行,        且用完后并不会把连接销毁,而是放回到缓冲池中,我们也可以设置同时的最大连接数等等,可以很好的避免之前连接操作的缺点    3): DataSource接口        对于数据库连接操作,有给我们提供了一个DataSource接口让我们来实现,        而这个接口一般会由一些开源组织或者服务器来实现        常用的有DBCP连接池与C3P0连接池, DataSource一般也叫数据源,也习惯把DataSource叫做连接池2: DBCP连接池    1): DBCP连接池使用前提        需要导入两个jar包commons-dbcp.jar, commons-pool.jar    2): 数据源对象        数据源对象与数据库连接对象不同,它是产生(获取 )数据库连接对象的工厂3: C3P0连接池    1): 使用前提需要导入c3p0的jar包    2): 使用

Dbcp

package com.tz.servlet.test;import java.io.InputStream;import java.sql.Connection;import java.sql.SQLException;import java.util.Properties;import javax.sql.DataSource;import org.apache.tomcat.dbcp.dbcp.BasicDataSource;import org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory;import org.junit.Test;public class DbcpTest {    /*     * 第二种方法     */    @Test    public void testDataSource2() throws Exception {        Properties properties = new Properties();        InputStream inStream = DbcpTest.class.getClassLoader().getResourceAsStream("db.properties");        properties.load(inStream);        DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);        Connection conn = dataSource.getConnection();        System.out.println(conn);        BasicDataSource bds = (BasicDataSource) dataSource;        System.out.println(bds.getInitialSize());    }    /*     * 第一种方法     */    @Test    public void testDataSource() throws SQLException {        //拿到一个数据源对象        BasicDataSource dataSource = new BasicDataSource();        //设置连接基本属性值        dataSource.setDriverClassName("com.mysql.jdbc.Driver");        dataSource.setUrl("jdbc:mysql://localhost:3306/test?useSSL=true");        dataSource.setUsername("root");        dataSource.setPassword("123");        //设置连接池中同时最大的连接数        dataSource.setMaxActive(3);        //设置连接池启动时创建的初始化连接数        dataSource.setInitialSize(3);        //设置连接池最大的等待时间  单位毫秒        dataSource.setMaxWait(1000*4);        //设置连接池中最小的空闲连接        dataSource.setMinIdle(3);        Connection conn1 = dataSource.getConnection();        System.out.println(conn1);        Connection conn2 = dataSource.getConnection();        System.out.println(conn2);        Connection conn3 = dataSource.getConnection();        System.out.println(conn3);        //释放连接,放回连接池中        conn3.close();        //Connection conn4 = dataSource.getConnection();        //System.out.println(conn4);    }}

c3p0

package com.tz.servlet.test;import java.beans.PropertyVetoException;import java.sql.Connection;import java.sql.SQLException;import org.junit.Test;import com.mchange.v2.c3p0.ComboPooledDataSource;public class C3P0Test {    private static ComboPooledDataSource pool = null;    static {        pool = new ComboPooledDataSource("intergalactoApp");    }    /*     * 第二种方法,使用配置文件     */    @Test    public void testC3p0_2() throws SQLException {        Connection conn1 = pool.getConnection();        System.out.println(conn1);        Connection conn2 = pool.getConnection();        System.out.println(conn2);        Connection conn3 = pool.getConnection();        System.out.println(conn3);        Connection conn4 = pool.getConnection();        System.out.println(conn4);    }    /*     * 第一种方法     */    @Test    public void testC3p0_1() throws PropertyVetoException, SQLException {        //创建一个ComboPooledDataSource对象        ComboPooledDataSource pool = new ComboPooledDataSource();        //设置基本连接属性值        pool.setDriverClass("com.mysql.jdbc.Driver");        pool.setJdbcUrl("jdbc:mysql://localhost:3306/test?useSSL=true");        pool.setUser("root");        pool.setPassword("123");        //获取连接        Connection conn = pool.getConnection();        System.out.println(conn);    }}

c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?><c3p0-config>    <named-config name="intergalactoApp">        <property name="driverClass">com.mysql.jdbc.Driver</property>        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test?useSSL=true</property>        <property name="user">root</property>        <property name="password">123</property>        <!-- 设置最大的连接数 -->        <property name="maxPoolSize">3</property>        <!-- 设置连接池启动时创建的初始化连接数量 -->        <property name="initialPoolSize">3</property>        <!-- 设置最大的等待时间 -->        <property name="checkoutTimeout">5000</property>        <!-- 一个连接同时能够使用Statement对象个数 -->        <property name="maxStatementsPerConnection">5</property>    </named-config></c3p0-config>
原创粉丝点击