数据库连接池技术

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库连接池技术相关的知识,希望对你有一定的参考价值。

1.数据库连接池
dbcp
apache的产品
核心的类 :BasicDataSource
commons.apache.org/proper/commons-dbcp/download_dbcp.cgi
http://commons.apache.org/proper/commons-pool/download_pool.cgi
c3p0
spring/hibernet
目前应用最广泛的。
有空闲自动回收链接功能
异步执行。
https://sourceforge.net/projects/c3p0/
核心的类:ComboPooledDataSource
配置文件:必须叫做 c3p0-config.xml
druid
tomcat配置连接池

dbcp配置数据库连接池,需要导入两个jar包分别是commons-pool-1.6.jar和commons-dbcp-1.4.jar

//方法一,通过字符串来设置连接参数
public
class JDBCUtil1 { private static BasicDataSource ds = null; private static String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8"; private static String user="root"; private static String password="123123"; private static String driverClass="com.mysql.jdbc.Driver"; static{ ds = new BasicDataSource(); //最基本的链接配置 ds.setUrl(url); ds.setUsername(user); ds.setPassword(password); ds.setDriverClassName(driverClass); //初始化连接数 ds.setInitialSize(5); //最大连接数 ds.setMaxActive(10); //最大等待时间 ds.setMaxWait(3000); } public static Connection getConnection(){ try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } }
//方法二通过配置文件读取连接参数
public
class JDBCUtil { private static BasicDataSource ds = null; static{ //properties中的key不能乱写 //通过BasicDataSource的set方法来得到key的写法,去掉set,首字母小写即可。 Properties prop = new Properties();
     //读取配置文件,配置文件在下面  InputStream inputStream
= JDBCUtil.class.getResourceAsStream("/db.properties"); try { prop.load(inputStream); ds = (BasicDataSource) BasicDataSourceFactory.createDataSource(prop); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnection(){ try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } }

配置文件名db.properties

url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
username=root
password=123123
driverClassName=com.mysql.jdbc.Driver
initialSize=5
maxActive=10
maxWait=3000

C3P0配置数据库连接池,需要导入c3p0-0.9.5.2.jar和mchange-commons-java-0.2.11.jar

配置方式一:

public class JDBCUtil1 {
    
    private static ComboPooledDataSource ds = null;
    
    private static String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
    private static String user="root";
    private static String password="123123";
    private static String driverClass="com.mysql.jdbc.Driver";
    
    static{
        ds = new ComboPooledDataSource();
        //基本配置
        ds.setJdbcUrl(url);
        ds.setUser(user);
        ds.setPassword(password);
        try {
            ds.setDriverClass(driverClass);
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        
        ds.setInitialPoolSize(5);
        ds.setMaxPoolSize(10);
        //设置超时时间
        ds.setCheckoutTimeout(3000);
    }
    
    public static Connection getConnection(){
        try {
            return ds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
    

}

配置方式二:通过读取配置文件c3p0-config.xml,配置文件必须命名唯一,只能叫c3p0-config.xml

配置文件信息

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <!-- 默认配置 -->
    <default-config>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
        <property name="user">root</property>
        <property name="password">123123</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="initialPoolSize">5</property>
        <property name="maxPoolSize">10</property>
        <property name="checkoutTimeout">3000</property>
    </default-config>
    
    <!--  -->
    <named-config name="intergalactoApp">
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
        <property name="user">root</property>
        <property name="password">123123</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="initialPoolSize">10</property>
        <property name="maxPoolSize">20</property>
        <property name="checkoutTimeout">5000</property>
    </named-config>
</c3p0-config>

代码示范

public class JDBCUtil {
    private static ComboPooledDataSource ds = null;
    static {
        // 读取的是default-config
        // ds = new ComboPooledDataSource();
        // 读取的是<named-config name="intergalactoApp">
        ds = new ComboPooledDataSource("intergalactoApp");
    }

    public static Connection getConnection() {
        try {
            return ds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

}

 

以上是关于数据库连接池技术的主要内容,如果未能解决你的问题,请参考以下文章

为啥要用Spring管理连接池,它有啥好处?

数据库连接池技术详解

MySQL与Redis数据库连接池介绍(图示+源码+代码演示)

JavaWeb之数据库连接池

JavaWeb之数据库连接池

数据库连接池的Java连接池