当前位置: 首页 > wzjs >正文

ppt模板免费下载 素材手机版洛阳网站建设优化案例

ppt模板免费下载 素材手机版,洛阳网站建设优化案例,用html做女装网站,海口网站建设多少钱一、 连接池的理解 1.不使用连接池有啥问题 数据库mysql3306是一个进程,JVM也是一个进程 Connection对象是重量级对象,创建Connection对象就是建立两个进程之间的通信,非常耗费资源。一次完整的数据库操作,大部分时间都耗费在连…

一、 连接池的理解

1.不使用连接池有啥问题

数据库mysql3306是一个进程,JVM也是一个进程

Connection对象是重量级对象,创建Connection对象就是建立两个进程之间的通信,非常耗费资源。一次完整的数据库操作,大部分时间都耗费在连接对象的创建。

第一个问题:每一次请求都创建一个Connection连接对象,效率较低。

第二个问题:连接对象的数量无法限制。如果连接对象的数量过高,会导致mysql数据库服务器崩溃。

2.使用连接池来解决什么问题

提前创建好N个连接对象,将其存放到一个集合中(这个集合就是一个缓存)

用户请求时,需要连接对象直接从连接池中获取,不需要创建连接对象,因此效率较高。

另外,连接对象只能从连接池中获取,如果没有空闲的连接对象,只能等待,这样连接对象创建的数量就得到了控制。

3.javax.sql.DataSource

连接池有很多,不过所有的连接池都实现了 javax.sql.DataSource 接口。也就是说我们程序员在使用连接池的时候,不管使用哪家的连接池产品,只要面向javax.sql.DataSource接口调用方法即可。

另外,实际上我们也可以自定义属于我们自己的连接池。只要实现DataSource接口即可。

datasource:数据源,所以连接池也可称为数据源

1.4. 连接池的属性

对于一个基本的连接池来说,一般都包含以下几个常见的属性:

  1. 初始化连接数(initialSize):连接池初始化时创建的连接数。
  2. 最大连接数(maxActive):连接池中最大的连接数,也就是连接池所能容纳的最大连接数量,当连接池中的连接数量达到此值时,后续请求会被阻塞并等待连接池中有连接被释放后再处理。
  3. 最小空闲连接数量(minIdle): 指连接池中最小的空闲连接数,也就是即使当前没有请求,连接池中至少也要保持一定数量的空闲连接,以便应对高并发请求或突发连接请求的情况。
  4. 最大空闲连接数量(maxIdle): 指连接池中最大的空闲连接数,也就是连接池中最多允许保持的空闲连接数量。当连接池中的空闲连接数量达到了maxIdle设定的值后,多余的空闲连接将会被连接池释放掉。
  5. 最大等待时间(maxWait):当连接池中的连接数量达到最大值时,后续请求需要等待的最大时间,如果超过这个时间,则会抛出异常。
  6. 连接有效性检查(testOnBorrow、testOnReturn):为了确保连接池中只有可用的连接,一些连接池会定期对连接进行有效性检查,这里的属性就是配置这些检查的选项。
  7. 连接的driver、url、user、password等。

以上这些属性是连接池中较为常见的一些属性,不同的连接池在实现时可能还会有其他的一些属性,不过大多数连接池都包含了以上几个属性,对于使用者来说需要根据自己的需要进行灵活配置。

二、常用的连接池

1. DBCP

  • 诞生时间:2001年

  • 特点

    • 最早的连接池之一。

    • 由Apache Software Foundation开发,最初是为了满足Tomcat服务器对连接池管理的需求。

    • 设计简单,适合基础场景。


2. c3p0

  • 诞生时间:2004年

  • 特点

    • 由Steve Waldman开发,高性能、高可靠性、易配置。

    • 提供连接池的容错能力、自动重连等功能。

    • 适用于高并发场景和数据量大的应用。


3. Druid

  • 诞生时间:2012年

  • 特点

    • 由阿里巴巴集团开发,功能丰富。

    • 不仅是一个连接池,还支持监控、分析、管理数据库。

    • 提供SQL防火墙、统计分析、缓存、访问控制等功能。

    • 适用于需要细粒度控制数据库访问的场景。


4. HikariCP

  • 诞生时间:2012年

  • 特点

    • 由Brett Wooldridge开发,被认为是Java语言下最快的连接池之一。

    • 快速启动、低延迟、低资源消耗。

    • 专注于连接池的核心功能,轻量级且性能极致。

    • 对各种数据库的兼容性更好,适用于高并发和云端应用。


5. BoneCP

  • 诞生时间:2015年

  • 特点

    • 由Dominik Gruntz开发,高性能连接池。

    • 支持分布式事务、连接空闲检查、SQL语句跟踪和性能分析。

    • 适用于大型应用系统和高并发负载场景。


总结:

  • Druid:功能丰富,适合需要监控和管理的场景。

  • HikariCP:性能极致,适合高并发和云端应用。

  • c3p0:稳定可靠,适合大数据量和高并发场景。

  • DBCP:简单易用,适合基础需求。

  • BoneCP:高性能,适合大型系统和高并发负载。

三、连接池的使用

1.Druid的使用


第一步:引入Druid的jar包

第二步:配置文件

在类的根路径下创建一个属性资源文件:jdbc.properties

driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbc
username=root
password=abc123
initialSize=3
maxActive=20

第三步:编写代码,从连接池中获取连接对象

// 读取属性配置文件
InputStream in = DruidConfig.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties props = new Properties();
props.load(in);
// 创建连接池
DataSource dataSource = DruidDataSourceFactory.createDataSource(props);
Connection conn = dataSource.getConnection();

第四步:关闭连接

仍然调用Connection的close()方法,但是这个close()方法并不是真正的关闭连接,只是将连接归还到连接池,让其称为空闲连接对象。这样其他线程可以继续使用该空闲连接。

示例代码:

import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;/*** ClassName: JDBCTest24* Description: 演示 druid连接池的使用。*/
public class JDBCTest27 {public static void main(String[] args) throws Exception{// 获取一个输入流,指向一个属性资源文件InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties");// 创建属性类对象Properties prop = new Properties();// 将属性配置文件的资源加载到属性类对象当中prop.load(in);// 获取连接池对象DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);// 通过连接池获取连接对象Connection conn = dataSource.getConnection();System.out.println(conn);// CRUD操作....// 关闭资源(这个不是真正的关闭,只是将连接池中的连接对象状态修改为空闲)conn.close();}
}

运行结果:

2.DbUtils的升级改造

DbUtils类:

import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;/*** ClassName: DbUtils2* Description:使用druid连接池的JDBC工具类*/
public class DbUtils2 {private DbUtils2(){}private static DataSource dataSource;static {try {InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties");Properties prop = new Properties();prop.load(in);dataSource = DruidDataSourceFactory.createDataSource(prop);} catch (Exception e) {throw new RuntimeException(e);}}/*** 获取数据库连接对象* @return 连接对象* @throws SQLException*/public static Connection getConnection() throws SQLException {return dataSource.getConnection();}/*** 释放资源* @param conn 连接对象* @param stmt 数据库操作对象* @param rs 结果集对象*/public static void close(Connection conn, Statement stmt, ResultSet rs){if (rs != null) {try {rs.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (stmt != null) {try {stmt.close();} catch (SQLException e) {throw new RuntimeException(e);}}if (conn != null) {try {conn.close();} catch (SQLException e) {throw new RuntimeException(e);}}}
}

测试类:

import oop3.utils.DbUtils2;import java.sql.Connection;/*** ClassName: JDBCTest25* Description:使用我们改造之后的JDBC工具类*/
public class JDBCTest28 {public static void main(String[] args) throws Exception{Connection conn1 = DbUtils2.getConnection();System.out.println(conn1);conn1.close();Connection conn2 = DbUtils2.getConnection();System.out.println(conn2);conn2.close();Connection conn3 = DbUtils2.getConnection();System.out.println(conn3);conn3.close();Connection conn4 = DbUtils2.getConnection();System.out.println(conn4);conn4.close();}
}

运行结果:

3. HikariCP的使用

第一步:引入jar包

第二步:编写配置文件

在类的根路径下创建一个属性资源文件:jdbc2.properties

jdbcUrl=jdbc:mysql://localhost:3306/jdbc
username=root
password=1234
driverClassName=com.mysql.cj.jdbc.Driver
minimumIdle=5
maximumPoolSize=20

第三步:编写代码,从连接池中获取连接

InputStream in = HikariConfig.class.getClassLoader().getResourceAsStream("jdbc2.properties");
Properties props = new Properties();
props.load(in);
HikariConfig config = new HikariConfig(props);
DataSource dataSource = new HikariDataSource(config);
Connection conn = dataSource.getConnection();

第四步:关闭连接(调用conn.close(),将连接归还到连接池,连接对象为空闲状态。)

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;/*** ClassName: JDBCTest26* Description:使用HikariCP连接池技术*/
public class JDBCTest29 {public static void main(String[] args) throws Exception{InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc2.properties");// 创建属性类对象Properties properties = new Properties();properties.load(in);// 创建配置信息对象HikariConfig config = new HikariConfig(properties);// 获取连接池DataSource dataSource = new HikariDataSource(config);Connection conn = dataSource.getConnection();System.out.println(conn);// .....conn.close();}
}

运行结果:


文章转载自:

http://SOcWch8r.spLkk.cn
http://z15WjJfn.spLkk.cn
http://xkjf140B.spLkk.cn
http://jetwRTUI.spLkk.cn
http://nWC8oTw5.spLkk.cn
http://ddXHPVMd.spLkk.cn
http://DkoT7ZCP.spLkk.cn
http://2wG3o7KS.spLkk.cn
http://QRWijnUD.spLkk.cn
http://bSKEIu2G.spLkk.cn
http://sAGOha5O.spLkk.cn
http://kWvOkBmg.spLkk.cn
http://YdsistyA.spLkk.cn
http://nyxUEeWr.spLkk.cn
http://r1HEAJm0.spLkk.cn
http://qbkqHBh4.spLkk.cn
http://MFYZOeqd.spLkk.cn
http://Vwk1HCYp.spLkk.cn
http://CNcTIzyL.spLkk.cn
http://rSwI60gJ.spLkk.cn
http://AvRYO9tf.spLkk.cn
http://4jSqsxEM.spLkk.cn
http://mwKe63Js.spLkk.cn
http://S7G7Xx9M.spLkk.cn
http://tBYvE6KA.spLkk.cn
http://tJHwrrrz.spLkk.cn
http://fByrHzYW.spLkk.cn
http://lfLNM8bC.spLkk.cn
http://P06lrwE4.spLkk.cn
http://XmQqCHDh.spLkk.cn
http://www.dtcms.com/wzjs/752934.html

相关文章:

  • 下载站模板 wordpress江苏城乡建设职业学院就业网站
  • 网站建设 公司 常州阿里云租的域名怎么做网站
  • 关于字体设计的网站如何做地推推广技巧
  • 化妆网站建设的目的建筑网站官网
  • 动漫网站做毕业设计简单吗wordpress插件文件夹在哪
  • 网站部署环境低价建站在哪里买
  • 网站修改了关键词被降权google怎么做网站推广
  • 公司自己做网站推广网站收录是怎么回事
  • 来年做哪些网站能致富旅游景区网络营销案例
  • 平台网站建设意见征求表制作网站的公司叫什么
  • 手机网站可以做动态吗西安互联网推广公司
  • 台州网站制作 外贸wordpress memcached zou.lu
  • 网站营销方案wordpress如何去掉amp:
  • wordpress外链站内打开微信长图的免费模板网站
  • 住房和城乡建设部网站31号文canvas做的手机网站
  • 网站开发学什么wordpress the7 汉化
  • 如何请人创建一个网站wordpress js 版本
  • 大学网站开发专业怎么样营销型网站代理
  • 上海公司网站建设怎么在微信创建公众号
  • 网站建设的域名的选择福州做网站哪家好
  • 网站二级菜单是什么意思网页制作html完整代码
  • 用织梦建设网站淘宝网站的论坛做的怎么样
  • 做百度网站排名软件广告网架
  • 电子商务网站建设是什么天眼
  • 网站建设类公司新闻上海网站建设联系方式
  • 影视网站怎么做内链旅游网站页面设计
  • 如何做网站的链接结构html免费网站模板下载
  • 建设银行网站首页打涡阳网站建设
  • 大连百姓网免费发布信息网站安全的小网站
  • 做网站需要什么学历合肥房地产交易网