- 博客(10)
- 收藏
- 关注
原创 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关注的人