VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > MySQL >
  • 数据库连接池

转载自
为什么使用数据库连接池

数据库连接是一种关键、有限且昂贵的资源,创建和释放数据库连接是一个很耗时的操作,频繁地进行这样的操作将占用大量的性能开销,进而导致网站的响应速度下降,严重的时候可能导致服务器崩溃;数据库连接池可以节省系统许多开销。

数据库连接池是什么

  • 数据库连接池(Database Connection Pooling)在程序初始化时创建一定数量的数据库连接对象并将其保存在一块内存区中,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接以避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
    数据库连接池不仅负责创建数据库连接,还负责分配、管理和释放数据库连接,可以通过配置连接池的参数来控制连接池中的初始连接数、最小连接、最大连接、最大空闲时间等。
  • 最小连接数
    是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费。
  • 最大连接数
    限定了连接池能存储的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会造成应用程序因不能立刻获得数据库连接而对程序产生功能性影响。
  • 最小连接数与最大连接数差距
    最小连接数与最大连接数相差太大,最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放

原理

程序初始化时创建一定数据量的数据库连接对象存储在内存中,当程序需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象;如果连接池内没有空闲连接,连接池创建新的数据库连接对象并将这个连接对象提供给应用程序使用,应用程序用完后,数据库连接池不会立刻关闭该连接,在空闲时间超过最大空闲时间时,该连接才被关闭;当程序需要再次访问数据库时,数据库连接池会将空闲时间最长的那个连接提供给应用程序; 如果数据库连接请求超过最大连接数,则该数据库连接请求被加入到等待队列中;程序退出时,数据库连接池断开所有连接并释放资源。

常用连接池

1、DBCP:DBCP(DataBase connection pool)数据库连接池是apache上的一个 java连接池项目,也是 tomcat使用的连接池组件;单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar.dbcp没有自动回收空闲连接的功能。官网:http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi
2、C3P0:C3P0是一个开源的jdbc连接池,它实现了数据源和jndi绑定,支持jdbc3规范和jdbc2的标准扩展。c3p0是异步操作的,缓慢的jdbc操作通过帮助进程完成。扩展这些操作可以有效的提升性能。目前使用它的开源项目有Hibernate,Spring等。c3p0有自动回收空闲连接功能。注: JNDI(Java Naming and Directory Interface,Java命名和目录接口)是SUN公司提供的一种标准的Java命名系统接口。官网:https://sourceforge.net/projects/c3p0/
3、Druid:
Druid数据库连接池是阿里巴巴开源平台上的一个开源项目,该连接池性能高效,简单SQL语句用时10微秒以内,复杂SQL用时30微秒。官网:https://github.com/alibaba/druid
4、HikariCP:
HikariCP数据库连接池尽管是后起之秀,但却PK掉其它数据库连接池技术,成为目前速度最快的数据库连接池,SpringBoot2.0也已经采用HikariCP作为默认连接池配置。官网:http://brettwooldridge.github.io/HikariCP/

Spring配置连接池

此处使用HikariCP作为示例,并使用JDBC和mysql数据库
需要导入的jar文件
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	<bean class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
	 	<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
	 	<property name="jdbcUrl" value="jdbc:mysql:/127.0.0.1:3306/test"></property>
	 	<property name="username" value="root"></property>
	 	<property name="password" value="root"></property>
	</bean>

</beans>

创建测试类

package com.spring.jdbc;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.zaxxer.hikari.HikariDataSource;

public class Test {
	public static void main(String[] args) {

		ClassPathXmlApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring_config.xml");
		HikariDataSource hikariDataSource=applicationContext.getBean(HikariDataSource.class);
		System.out.println(hikariDataSource);		
		applicationContext.close();
	}
}
 
 DEBUGu8BBEu7F6Eu8F93u51FAu65E5u5FD7u7EA7u522BuFF0Cu7531u4E8Eu4E3ADEBUGuFF0Cu6240u4EE5ERRORu3001WARNu548CINFO u7EA7u522Bu65E5u5FD7u4FE1u606Fu4E5Fu4F1Au663Eu793Au51FAu6765
log4j.rootLogger=DEBUG,Console,RollingFile
#u5C06u65E5u5FD7u4FE1u606Fu8F93u51FAu5230u63A7u5236u53F0
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern= [%-5p]-[%d{yyyy-MM-dd HH:mm:ss}] -%l -%m%n
#u5C06u65E5u5FD7u4FE1u606Fu8F93u51FAu5230u64CDu4F5Cu7CFBu7EDFDu76D8u6839u76EEu5F55u4E0Bu7684log.logu6587u4EF6u4E2D
log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingFile.File=D://log.log
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p %-40.40c %X{traceId}-%m%n
--------------------- 
u4F5Cu8005uFF1Au9A6Cu4E00u9E23Ivk 
u6765u6E90uFF1ACSDN 
u539Fu6587uFF1Ahttps://blog.csdn.net/qq_44724446/article/details/90044781 
u7248u6743u58F0u660EuFF1Au672Cu6587u4E3Au535Au4E3Bu539Fu521Bu6587u7AE0uFF0Cu8F6Cu8F7Du8BF7u9644u4E0Au535Au6587u94FEu63A5uFF01

相关教程