数据库连接池的高效性之时间提升

数据库连接池的高效性

测试数据库直接打开与使用连接池打开时间长短,连接1000次,看各自需要的时间。

结果图

1、直接打开花费时间(s):7333
2、连接池打开花费时间(s):69
3、速度提升倍数:106

一、主函数

package ch6.sql;

import java.sql.*;

public class Test_ConnectionPool_Time {

public static void main(String[] args) {

long t1=0,len1=0,len2=0;

t1=System.currentTimeMillis();

for(int i=0;i<1000;++i)

{

Connection con=SqlConnect01.getConnect();

try {

con.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

len1=System.currentTimeMillis()-t1;

System.out.println("1、直接打开花费时间(s):"+len1);

t1=System.currentTimeMillis();

Test_Pool test=new Test_Pool();

for(int i=0;i<1000;++i)

{

Connection con=test.getConnection();

test.putConnection(con);

}

test.over();

len2=System.currentTimeMillis()-t1;

System.out.println("2、连接池打开花费时间(s):"+len2);

System.out.println("3、速度提升倍数:"+len1/len2);

}

}

二、创建连接池类

package ch6.sql;

import java.sql.*;

import java.util.LinkedList;

public class Test_Pool {

LinkedList<Connection> list;

public Test_Pool(){

list=new LinkedList<Connection>();

for(int i=0;i<10;++i)

{

try {

Class.forName("com.mysql.jdbc.Driver");

Connection con=DriverManager

.getConnection("jdbc:mysql://localhost:3306/factory","root","mysql");

list.add(con);

} catch (Exception e) {

e.printStackTrace();

}

}

}

public synchronized Connection getConnection(){

if(list.size()>0)

{

return list.removeFirst();

}else

return null;

}

public synchronized void putConnection(Connection con){

list.add(con);

}

public void over(){

for(int i=0;i<list.size();++i)

try {

list.get(i).close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

三、直接连接程序

package ch6.sql;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class SqlConnect01 {

// 定义MySQL的数据库驱动程序

public static final String DBDRIVER = "com.mysql.jdbc.Driver" ;

// 定义MySQL数据库的连接地址

public static final String DBURL = "jdbc:mysql://localhost:3306/factory" ;

// MySQL数据库的连接用户名

public static final String DBUSER = "root" ;

// MySQL数据库的连接密码

public static final String DBPASS = "mysql" ;

public static Connection getConnect(){

Connection conn = null ;          // 数据库连接

try{

Class.forName(DBDRIVER) ;    // 加载驱动程序

}catch(ClassNotFoundException e){

e.printStackTrace() ;

}

try{

conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;

}catch(SQLException e){

e.printStackTrace() ;

}

return conn;

}

}

时间: 2024-08-24 09:28:56

数据库连接池的高效性之时间提升的相关文章

Java数据库连接池

写了个 Java数据库连接池,具备基本的功能点: 1.对池中活动连接的重用. 2.池满时的适时等待. 3.对空闲连接的适时关闭. 抛砖引玉,不吝赐教. 源码文件 DBConnection.java 1 package db; 2 3 import java.sql.Connection; 4 import java.util.concurrent.atomic.AtomicBoolean; 5 6 /** 7 * 封装的连接 8 * @author Linkwork, [email protec

数据库连接池应用中数据库服务器断开超时连接的问题

数据库应用开发过程中,我们可能会遇到一个问题:应用使用了数据库连接池,每经过指定时间后,发出到数据库服务器的任何请求都会失败,而且有且仅有一次失败,之后的正常访问都没有问题.尤其是在Web应用中,如果晚上时段没有访问,而第二天第一个访客的经历就是碰到一个数据库访问错误,如果开发系统的程序员没有注意这个问题的话,可能终端用户访问会看到抛出的一堆数据库异常信息. 其实,这个问题的主要原因是,应用中数据库连接池中会保存指定数量的数据库连接实例,而这些连接实例并没有定时地检测其到数据库服务器连接是否正常

jsp采用数据库连接池的方法获取数据库时间戳context.xml配置,jsp页面把时间格式化成自己需要的格式

<?xml version="1.0" encoding="UTF-8"?> <!-- 数据库连接池配置文件 --> <Context> <Resource name="jdbc/ConnectionPool" auth="Application" type="javax.sql.DataSource" username="root" passw

详解C3P0(数据库连接池)

一.基本定义 C3P0是一个开源的JDBC连接池,它实现了数据源与JNDI绑定,支持JDBC3规范和实现了JDBC2的标准扩展说明的Connection和Statement池的DataSources对象. 即将用于连接数据库的连接整合在一起形成一个随取随用的数据库连接池(Connection pool). 二.使用C3P0(数据库连接池)的必要性 当我们在进行基于数据库的web程序开发时,我们可以先在主程序(如Servlet.Bean)中通过JDBC中的DriverManager建立数据库连接,

数据库连接池配置说明

1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对这个问题提出来的. 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏.这项技术能明显提高对数据库操作的性能. 1.2 参考资料 DBC

[原创]java WEB学习笔记80:Hibernate学习之路--- hibernate配置文件:JDBC 连接属性,C3P0 数据库连接池属性等

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

一次项目实践中DBCP数据库连接池性能优化

关于数据库连接池DBCP的关注源于刚刚结束的一轮测试,测试内容是衡量某Webserver服务创建用户接口的性能.这是一款典型的tomcat应用,使用的测试工具是Grinder.DBCP作为tomcat服务器常用的数据库连接池,其性能表现直接关乎应用的性能. 1.遇到的问题 当并发量增加到100时,该接口出现瓶颈,此时TPS接近400,如下图.但是服务端CPU和内存等资源并未达到瓶颈,服务器CPU使用率仅为30%,内存使用率为40%.监控到的javaMethod慢方法为incrAppAccount

JAVA数据库连接池的革命 -- 从BoneCP到HikariCP

从BoneCP到HikariCP 今天笔者本想更新一下项目中使用到的BoneCP版本的.却无意发现jolbox网站打不开了.起初以为是被墙掉了,经过一番查找,居然在BoneCP的Github站看到了如下的一段话: BoneCP的作者不知何时修改了简述.(ps:红色框中的部分意思:虽然BoneCP性能优于老旧的C3PO和DBCP连接池,但是现在应该被舍弃了,以迎接HikariCP) 作者词语之间充满了悲凉之感,好比当年的少年侠客,风流倜傥,如今已是迟暮之年,不得不退出江湖,何其悲凉. 在笔者胡乱感

java Datasource,数据库连接池

目前有多重方式创建数据库连接池:JNDI,DBCP,C3P0等 为什么需要连接池: 使用java API DriverManager.getConnection()创建数据库连接,耗费内存和时间,实时性低:这种方式获取的connection需要手动关闭,不然会耗费大量的内存资源:对于频繁数据库操作,这种方式会造成性能低,尤其web应用 数据库连接池的功能: 负责创建.管理和分配数据库连接.初始化数据库连接池时,会创建一定数量的数据库连接对象,并存放于数据库连接池中.当请求连接数据库时,连接池会分