博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
三种数据库连接池的配置及使用(For JDBC)
阅读量:6693 次
发布时间:2019-06-25

本文共 10343 字,大约阅读时间需要 34 分钟。

DBCP

一、导包

Apache官网下载DBCP包,导入两个包路径如下:

commons-dbcp-1.4-bin\commons-dbcp-1.4\commons-dbcp-1.4.jar:连接池的实现

commons-pool-1.5.6-bin\commons-pool-1.5.6\commons-pool-1.5.6.jar:连接池实现的依赖库 

CSDN上jar包的下载地址:http://download.csdn/detail/u012802702/9491642

二、代码示例:

方式一:使用BasicDataSource 通过方法设置连接参数。

//获取BasicDataSource并配置,开始....        BasicDataSource source = new BasicDataSource();    source.setDriverClassName("com.mysql.jdbc.Driver");    source.setUrl("jdbc:mysql:///dbcptest");    source.setUsername("root");    source.setPassword("root");//获取BasicDataSource并配置,结束......    try {            conn = source.getConnection();            ps = conn.prepareStatement("select * from account");            rs = ps.executeQuery();            while (rs.next()) {                String name = rs.getString("name");                System.out.println(name);            }      } catch (Exception e) {            e.printStackTrace();        } finally {            if (rs != null) {                try {                    rs.close();                } catch (SQLException e) {                    e.printStackTrace();                } finally {                    rs = null;                }            }            if (ps != null) {                try {                    ps.close();                } catch (SQLException e) {                    e.printStackTrace();                } finally {                    ps = null;                }            }            if (conn != null) {                try {                    conn.close();                } catch (SQLException e) {                    e.printStackTrace();                } finally {                    conn = null;                }            }        }

其中的Close方法是被改写过得,及不会真正的将连接关闭,而是将其放回到连接池中,对于所有的数据源一般都会改写此方法(使用修饰)。

 

方式二:使用BasicDataSourceFactory +配置文件

try {               //获取并配置DataSource开始            Properties prop = new Properties();            prop.load(new FileReader("dbcp.properties"));            BasicDataSourceFactory factory = new BasicDataSourceFactory();            DataSource source = factory.createDataSource(prop);        //获取并配置DataSource,结束            conn = source.getConnection();            ps = conn.prepareStatement("select * from account");            rs = ps.executeQuery();            while (rs.next()) {                String name = rs.getString("name");                System.out.println(name);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            if (rs != null) {                try {                    rs.close();                } catch (SQLException e) {                    e.printStackTrace();                } finally {                    rs = null;                }            }            if (ps != null) {                try {                    ps.close();                } catch (SQLException e) {                    e.printStackTrace();                } finally {                    ps = null;                }            }            if (conn != null) {                try {                    conn.close();                } catch (SQLException e) {                    e.printStackTrace();                } finally {                    conn = null;                }            }        }

配置文件dbcp.properties(注配置文件中的参数的名称固定): 

driver=com.mysql.jdbc.Driverurl=jdbc:mysql:///dbcptestuser=rootpassword=root

另:配置文件中除了可以配置以上4个连接的必须信息外,还可以配置其他的参数,官方较完整的配置文件的参考如下:

#连接设置driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/jdbcusername=rootpassword= #
initialSize=10 #最大连接数量,连接数连不能超过该值maxActive=50 #
maxIdle=20 #
minIdle=5 #
maxWait=60000 #JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。connectionProperties=useUnicode=true;characterEncoding=gbk #指定由连接池所创建的连接的自动提交(auto-commit)状态。defaultAutoCommit=true #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLEdefaultTransactionIsolation=READ_UNCOMMITTED

C3P0

一、导包

下载C3p0数据源的jar包导入如下jar包:

Lib\c3p0-0.9.1.2.jar

CDSN的下载地址:http://download.csdn/detail/u012802702/9491641

二、示例

方式一:使用代码配置参数

try{            ComboPooledDataSource source = new ComboPooledDataSource();            source.setDriverClass("com.mysql.jdbc.Driver");            source.setJdbcUrl("jdbc:mysql:///day11");            source.setUser("root");            source.setPassword("root");                        conn = source.getConnection();            ps = conn.prepareStatement("select * from account");            rs = ps.executeQuery();            while(rs.next()){                String name = rs.getString("name");                System.out.println(name);            }        }catch (Exception e) {            e.printStackTrace();        }finally{            if(rs!=null){                try {                    rs.close();                } catch (SQLException e) {                    e.printStackTrace();                }finally{                    rs = null;                }            }            if(ps!=null){                try {                    ps.close();                } catch (SQLException e) {                    e.printStackTrace();                }finally{                    ps = null;                }            }            if(conn!=null){                try {                    conn.close();                } catch (SQLException e) {                    e.printStackTrace();                }finally{                    conn = null;                }            }        }    }

方式二:配置文件的方式加载数据库驱动信息 

C3p0的使用较为简单,通常来说只要在src目录下添加一个c3p0的配置文件,在程序中使用一句代码

1)ComboPooledDataSource source = new ComboPooledDataSource()使用配置文件中的默认配置<default-config>,或者

2)ComboPooledDataSource source = new ComboPooledDataSource(“配置文件中name-config的名称”)使用配置文件中的其他配置

 

默认情况下C3p0会在类加载路径下搜索名称为c3p0-config.xml的配置文件,因此该配置文件应该方式在类加载目录、或者jar加载目录、或者WEB-INF/classes、或类似目录下。

c3p0-config.xml文件配置如下:

com.mysql.jdbc.Driver
jdbc:mysql:///c3p0test
root
root
com.mysql.jdbc.Driver
jdbc:mysql:///c3p0test1
root
root

当然在配置文件中可以配置数据库连接池的其他相关信息,官方建议的基本配置参数有:

acquireIncrement:声明当连接池中连接耗尽时再一次新生成多少个连接,默认为3个

initialPoolSize:当连接池启动时,初始化连接的个数,必须在minPoolSize~maxPoolSize之间,默认为3

minPoolSize:任何时间连接池中保存的最小连接数,默认3

maxPoolSize:在任何时间连接池中所能拥有的最大连接数,默认15

maxIdleTime:超过多长时间连接自动销毁,默认为0,即永远不会自动销毁

 代码如下:

import java.sql.Connection;import java.sql.SQLException;import javax.sql.DataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;public class JDBCUtils {    private static DataSource dataSource = null;        static{        dataSource = new ComboPooledDataSource("javawebapp");    }        public static Connection getConnection(){          try {            return dataSource.getConnection();        } catch (SQLException e) {            e.printStackTrace();            throw new DBException("");        }    }     public static void release(Connection connection) {        try {            if(connection != null){                connection.close();            }        } catch (SQLException e) {            e.printStackTrace();            throw new DBException("");        }    }    }

 

C03p0的官方参考模板如下:

con_test
30000
30
10
超过多长时间连接自动销毁,默认为0,即永远不会自动销毁
30
100
10
200
10
1
0
声明当连接池中连接耗尽时再一次新生成多少个连接,默认为3个
50
当连接池启动时,初始化连接的个数,必须在minPoolSize~maxPoolSize之间,默认为3
100
任何时间连接池中保存的最小连接数,默认3
50
在任何时间连接池中所能拥有的最大连接数,默认15
1000
0
5
1
1
1
5
50

Tomcat内置数据源(DBCP) 

 

Tomcat中内置有数据源,而DBCP与tomcat同属于Apache的项目,因此不难知道tomcat中内置的数据源其实就是DBCP数据源。使用Tomcat的内置数据源可分为两步:

 

一:为tomcat配置数据源

通常情况下,在使用eclipse或Myeclipse开发时,自己习惯于使用如下方式为tomcat配置数据源:

在web应用的META-INF文件夹下创建一个context.xml配置文件,并在其中添加<Context>标签进行配置,但,这种方式生成的数据源只能用于当前web应用.

详细context.xml文件的参考代码如下:

在tomcat启动时,会逐个加载其中的web应用,当其加载到当前应用时,会加载到META-INF文件夹下该context.xml配置文件,此时tomcat会根据其中的配置信息为当前web应用创建一个数据库连接池,注该数据库连接池只能用于当前web应用,tomcat下的其他web应用无法使用该数据库连接池。至于如何配置tomcat的数据库连接池才能使当前tomcat下的所有web应用都能使用,或者可以使当前虚拟主机下的web应用都能使用?请参考其他文章:http://blog.csdn.net/u012802702/article/details/51159547。 

二、程序中获取数据源

当tomcat读取到context.xml配置文件时会为当前web应用创建数据源,但我们在当前web应用中如何获取该数据源对象?

Tomcat中有一个共有的容器:jndi,当Tomcat为web应用创建数据源之后会将数据源以键值对的形式存放到jndi容器当中,其中键名就是数据源配置时给定的名字(详见context.xml配置文件)。

而Tomcat会自动将jndi容器放到初始化容器InitalContext中。且jndi以固定的名字(:comp/env)存储在InitalContext容器中,因此在web应用中可以通过如下步骤首先获取到数据源实例。

第一步:首先在Servlet中获取InitalContext容器实例

Context initCtx = new InitialContext();

第二步:在InitalContext容器中根据字符串java:comp/env搜寻,以及获取jndi容器实例

Context jndi = (Context) initCtx.lookup("java:comp/env");

第三部:根据数据源的名字从jndi容器获取到数据源实例。

DataSource source = jndi.lookUp("mySource");

完整参考代码如下:

Context initCtx = new InitialContext();Context jndi = (Context) initCtx.lookup("java:comp/env");DataSource source = jndi.lookUp("mySource");

但到此获取到数据源对象还没有结束,因为获取jndi的代码只能在Servlet中执行,即以上代码只能在Servlet中执行,因此还应创建一个Servlet类并在其init方法中加入以上代码,之后便可以将数据源对象传给其他程序使用(可以将数据源对象设为类变量、或将其放入到ServletContext作用域中等等)。同时将该Servlet配置成为tomcat启动时执行(即在web.xml配置文件中对应的该Servlet标签下添加:<load-on-startup>1</load-on-startup>)。

参考代码如下:

@Override    public void init() throws ServletException {        try{            Context initCtx = new InitialContext();            Context jndi = (Context) initCtx.lookup("java:comp/env");            DataSource source = (DataSource) jndi.lookup("mySource");            this.getServletContext().setAttribute(“dataSource”,source);        }catch (Exception e) {            e.printStackTrace();            throw new RuntimeException(e);        }    }

 

转载于:https://www.cnblogs.com/zhaoyan001/p/6362170.html

你可能感兴趣的文章
CSS布局自适应等分比例
查看>>
安装Git
查看>>
设置启动图片LaunchScreen 和 LaunchImage
查看>>
L84
查看>>
L157
查看>>
L156
查看>>
第十周作业
查看>>
win10常用快捷键
查看>>
vmware搭建vSAN提示磁盘不合格或者看不到磁盘的解决办法
查看>>
HashMap和Hashtable的区别
查看>>
Oracle EBS-SQL (INV-5):检查期间拉式物料领用记录数.sql
查看>>
Python之with语句原理
查看>>
在Window环境下多线程与CPU资源分配原则
查看>>
20170303新的开始
查看>>
Python--day25--复习(单继承和多继承的总结)
查看>>
@Html.EditFor()不能添加“只读”html属性;以及disable属性的坑
查看>>
Logger日志级别说明及设置方法、说明
查看>>
7-1 列出连通集 (25 分)
查看>>
Mybatis之Mapper动态代理
查看>>
【转】楼天城楼教主的acm心路历程(作为励志用)
查看>>