JDBC数据库连接池----简单使用

为了应对企业级的高并发的服务,许多服务器资源都用了池的概念。
内存池、线程池、数据库连接池等等。
本质的理念都是一样的,为了不在对用户进行服务(来一个用户创建一次资源)时资源的浪费,所以预先就创建了一定量的资源,然后交由管理程序进行管理,当池中有空闲的资源即可被用户获得,否则就需等待。

jdbc数据库连接池使用javax.sql.DataSource,DataSource是接口包含了连接池和连接池管理等功能,由服务器、开源组织实现 (tomcat等),
常见的实现有:
1.DBCP
2. C3P0
首先下好两个jar包
commons-dbcp
commons-pool

例子代码较简单不详细说明

配置文件

initialSize=5
maxTotal=5
maxIdle=5
minIdle=5
maxWaitMillis=1000
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/student?useSSL=false
username=root
package top.demo.test;

import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.apache.commons.dbcp2.DataSourceConnectionFactory;

import java.io.IOException;
import java.sql.Connection;

public class TestDBCP {


    public static void main(String argv[]) throws Exception {

        //test1();
        test2();


    }


    //基本设置测试
    public static void test1() throws SQLException {

        //创建DBCP数据源
        BasicDataSource dataSource=new BasicDataSource();

        //设置驱动 和 连接信息
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/student?useSSL=false");
        dataSource.setUsername("root");
        dataSource.setPassword("");

        //设置初始化连接个数
        dataSource.setInitialSize(10);
        //设置最大连接个数 负数是没有限制
        dataSource.setMaxTotal(50);
        //保持空闲的最大连接数。返回池后,将销毁过多的空闲连接
        dataSource.setMaxIdle(25);
        //设置池中空闲连接的最小数量。当空闲对象回收器运行时,池试图确保minIdle连接可用
        dataSource.setMinIdle(5);
        //设置等待获取连接的超时时间 超出时间将抛异常
        dataSource.setMaxWaitMillis(5*1000);

        Connection connection= dataSource.getConnection();


        System.out.println(connection);


    }


    //从配置文件加载配置测试
    public static void test2() throws Exception {
        //配置文件书写规则为 set方法后的字符且第一个字符小写

        Properties properties=new Properties();
        properties.load(ClassLoader.getSystemResourceAsStream("dbcp.properties"));

        BasicDataSource dataSource= BasicDataSourceFactory.createDataSource(properties);

        try {

            Connection connection= dataSource.getConnection();
            Connection connection2= dataSource.getConnection();
            Connection connection3= dataSource.getConnection();
            Connection connection4= dataSource.getConnection();
            Connection connection5= dataSource.getConnection();
            Connection connection6= dataSource.getConnection();
        }catch (Exception e) {
            // TODO: handle exception
            if(e.getMessage().equals("Cannot get a connection, pool error Timeout waiting for idle object" + 
                    "")) 
            {
                System.out.println("超时了");
                throw e;
            }
        }

        //System.out.println(connection);


    }

}

猜你喜欢

转载自blog.csdn.net/qq_27617675/article/details/82620577