自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

翻译 Druid学习日记(十)

获取连接流程:初始化连接池:从池中获取连接的流程:添加连接的守护线程:抛弃连接的守护线程:回收连接:

2022-05-21 01:52:12 126

原创 Druid学习日记(九)

回收连接DruidPooledConnection的close方法触发的,目标方法为recycle,达到回收的目的: public void close() { if (LOG.isInfoEnabled()) { LOG.info("{dataSource-" + this.getID() + "} closing ..."); } lock.lock(); try { if

2022-05-20 02:33:46 348

原创 Druid学习日记(八)

Druid内置提供了一个StatViewServlet用于展示Druid的统计信息。这个StatViewServlet的用途包括:提供监控信息展示的html页面 提供监控信息的JSON API根据指定的url来获取jmx服务返回的内容: /** * * @param connetion jmx连接 * @param url url内容 * @return the jmx返回的内容 * @throws Exception the e

2022-05-19 02:21:52 201

原创 Druid学习日记(七)

DruidDataSource数据库连接池的的核心功能,实际上都离不开ReentrentLock和两个Condition组成的生产者和消费者模型。比如上图中的创建连接线程和销毁连接线程,通过condition互相通信,联动实现线程池的生产与销毁。当连接池中连接被消耗,触发empty的通知的时候。阻塞在empty上的生产者开始创建连接;创建完成之后,发送notEmpty的sigal信号,触发在notEmpty上的消费者来获取连接进行消费;这是Druid连接池的基本原理。...

2022-05-18 01:51:37 177

原创 Druid学习日记(六)

今天浏览运行了druid-admin工程,它可以对集群环境下druid的数据监控进行采集汇总并展现,其支持三种注册中心:nacos、consul、eureka,可以在配置文件中启用不同的注册中心,配置如下所示:server: port: 19999spring: application: name: druid-admin main: allow-bean-definition-overriding: true cloud: consul: ena

2022-05-17 02:19:26 856

原创 Druid学习日记(五)

今天学习了下HighAvailableDataSource的内容,从名字不难看出它是一个可以提供高可用能力的数据源,其官网解释如下:DataSource class which contains multiple DataSource objects.下面从getConnection方法开始,看看它与DruidDataSource有何区别: @Override public Connection getConnection() throws SQLException {

2022-05-15 03:38:48 130

原创 Druid学习日记(四)

Druid Spring Boot StarterDruid Spring Boot Starter 可以帮助我们在Spring Boot项目中集成Druid数据库连接池和监控;其项目结构如下:在META-INF文件夹下有一个spring.factories文件,指定了需要加在的Bean:org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.alibaba.druid.spring.boot.autoco

2022-05-14 02:50:21 326 1

原创 Druid学习日记(三)

今天详细梳理下Druid回收连接的过程:在DruidDataSource的init过程中,会调用createAndStartDestroyThread()方法:protected void createAndStartDestroyThread() { destroyTask = new DestroyTask(); if (destroyScheduler != null) { long period = timeBetweenEvict

2022-05-13 01:39:12 300

原创 Druid学习日记(二)

今天详细梳理下Druid获取连接的过程:首先调用getConnectionInternal方法尝试获取池化连接,在获取超时的情况下(捕获到 GetConnectionTimeoutException),如果重试次数小于notFullTimeoutRetryCount并且this.poolingCount + this.activeCount >= this.maxActive,会重新尝试获取连接: // handle notFullTimeoutRetryDruidPooledConn

2022-05-12 01:30:31 499

原创 Druid学习日记(一)

从Druid官网下载源码后,执行mvn clean install -DskipTests编译,使用IDEA打开工程后,可以看到如下目录:其中pool模块作为Druid内核,尤其值得阅读,所以笔者也从pool模块开始学习Druid!pool模块结构:使用过Druid应该对上图中的DruidDataSource类不陌生,Druid配置一个数据源少不了使用这个类,其中常见的配置如下所示:配置完成后,使用DruidDataSource.getConnection获取一个...

2022-05-11 01:43:16 122

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除