飞道的博客

Tomcat-bdcp连接池、dbcp、c3p0连接池的配置与使用

522人阅读  评论(0)

写在前面:
为什么使用连接池?
减少计算机性能消耗
连接池的核心?
将连接指向改了,指向数据源而不是直接指向数据库
什么是JNDI?
java命名与目录接口,将某一个资源(对象),以配置文件的形式写入,通过配置文件拿到资源(对象)信息

Tomcat-bdcp连接池

1.导入jar包(版本自选)

mysql-connector-java-8.0.19.jar
点击进入maven库下载

2.配置tomcat中context.xml文件

  • 进入tomcat安装目录,tomcat/conf/context.xml
  • 添加配置信息
  <Resource name="Demo" 
        auth="Container" 
        type="javax.sql.DataSource" 
        username="root" 
        password="123456" 
        maxIdle="30" 
        maxWait="10000" 
        maxActive="100"
        driverClassName="com.mysql.cj.jdbc.Driver"
        url="jdbc:mysql://127.0.0.1:3306/aa" />


配置信息中各种信息的意思如下表:

3.配置项目工程中web.xml文件

	<resource-ref>
        <res-ref-name>Demo</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>


这样子就配置完成了,接下来就可以使用了!

4.使用:将访问数据库的连接指向数据源

以前写过用jdbc直接访问数据库:点击查看
这是与数据库建立连接的代码(jdbc直接连接数据库)

现在我们通过jdbc连接池连接

 	Class.forName("com.mysql.cj.jdbc.Driver");
    Context ctx=new InitialContext();// 从context.xml拿数据源
    DataSource ds=(DataSource)ctx.lookup("java:comp/env/Demo");
    connection=ds.getConnection();

总结下来,使用数据源,就是更改Connection的获取方式

dbcp连接池

1.导入jar包(版本自选)

  • commons-dbcp-1.4.jar
    主要用到此jar包下面两个类:
    Bas icDataSource、Basi cDataSourceFactory
  • commons-pool-1.6.jar
  • mysql-connector-java-8.0.19.jar

点击进入maven库下载

2.使用

  • 以Bas icDataSource方式获取
    new一个DasicDataSource对象然后设置各种属性

  • BasicDataSourceFactory方式: 配置方式
    编写一个“ properties”文件(dbcpconfig. properties), 编写方式key=value

下面以一个栗子来理解,首先创建一个类
这是第一种方式,new一个DasicDataSource对象后设置各种属性

package com.thxy.untils;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.util.Properties;

public class DBCPDemo {
    public static DataSource getDataSourceWithDBCP(){
        BasicDataSource dbcp = new BasicDataSource();
        dbcp.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dbcp.setUrl("jdbc:mysql://localhost : 3306/my_test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT");
        dbcp.setUsername("root");
        dbcp.setPassword("123456");
        dbcp.setInitialSize(20);
        dbcp.setMaxActive(10);
        return dbcp;
    }

    public static void main(String[] args) throws Exception {
        System.out.println(getDataSourceWithDBCP().getConnection());
    }
}

运行结果,拿到链接并输出

下面是第二种方式,先编写一个文件dbcpconfig. properties

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost : 3306/my_test?
useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
username=root
password=123456
initialSize=10

创建一个类

package com.thxy.untils;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.io.InputStream;
import java.util.Properties;

public class DBCPDemo2 {
  
        public static DataSource getDataSourceWithDBCPBYProperties() throws Exception{
            DataSource dbcp =null;
            Properties properties =new Properties();

            InputStream input = new DBCPDemo().getClass().getClassLoader().getResourceAsStream("dbcpconfig.properties");
            properties.load(input);
            dbcp=BasicDataSourceFactory.createDataSource(properties);
            return dbcp;
        }

    public static void main(String[] args) throws Exception {
    
       System.out.println(getDataSourceWithDBCPBYProperties().getConnection());
    }

}

运行结果:拿到链接并输出

c3p0连接池

核心类 : ComboPool edDataSource
他有两种方式:硬编码、配置文件
但是它们合二为一,通过ComboPool edDataSource的构造方法参数区分: 如果无参,硬编码;有参,配置文件

1.导入jar包(版本自选)

c3p0-0.9.5.5.jar
mchange-commons-java-0.2.12.jar
如果是orcal数据库,则还需导入orcal适配的包。
点击进入maven库下载

2.使用

  • 硬编码模式,先new一个ComboPooledDataSource,然后通过new的对象获取各种配置信息
package com.thxy.untils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;

public class c3p0Demo {
    public static DataSource getDateSourceWithC3p0(){
        ComboPooledDataSource c3p0 =new ComboPooledDataSource();
        try {
            c3p0.setDriverClass("com.mysql.cj.jdbc.Driver");
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
       	    c3p0.setJdbcUrl("jdbc:mysql://localhost:3306/my_test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT");
        	c3p0.setUser("root");
        	c3p0.setPassword("123456");

        return c3p0;
    }

    public static void main(String[] args) throws Exception{
        System.out.println(getDateSourceWithC3p0().getConnection());
    }
}

运行结果:获取链接并输出

  • 配置文件模式

编写配置文件"c3p0-config.xml"(注意名字不要改)

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <property name="user">root</property>
        <property name="password">123456</property>
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/my_test?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=GMT</property>
        <property name="checkoutTimeout">30000</property>
    </default-config>
</c3p0-config>

注意注意注意:要把url里所有的“&”改成“&”(带分号),否则会报错

编写一个类

package com.thxy.untils;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;

public class c3p0Demo {
  
    public static DataSource getDateSourceWithC3p0ByXml(){
        ComboPooledDataSource c3p0= new ComboPooledDataSource();
        return c3p0;
    }

    public static void main(String[] args) throws Exception{
        System.out.println(getDateSourceWithC3p0ByXml().getConnection());
    }
}

运行结果


转载:https://blog.csdn.net/weixin_44894962/article/details/106125624
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场