聊聊HttpClient的ServiceUnavailableRetryStrategy

2023-10-13
阅读 5 分钟
332
ServiceUnavailableRetryStrategy定义了retryRequest方法用于返回是否该重试,getRetryInterval返回自动重试的间隔

聊聊HttpClient的重试机制

2023-10-12
阅读 12 分钟
785
HttpRequestRetryHandler接口定义了retryRequest方法,它接收IOException、executionCount及context,然后判断是否可以重试

聊聊HttpClient的NoHttpResponseException

2023-10-11
阅读 3 分钟
435
序本文主要研究一下HttpClient的NoHttpResponseExceptionNoHttpResponseExceptionorg/apache/http/NoHttpResponseException.java {代码...} NoHttpResponseException继承了IOException,用于表示目标服务器没有返回一个正常的http responseDefaultHttpResponseParserorg/apache/http/impl/conn/DefaultHttpResponseParse...

聊聊HttpClient的KeepAlive

2023-10-10
阅读 10 分钟
673
ConnectionKeepAliveStrategy接口定义了getKeepAliveDuration方法,用于返回该connection空间多久以内被复用是安全的

聊聊HttpClient的ResponseHandler

2023-10-09
阅读 6 分钟
333
序本文主要研究一下HttpClient的ResponseHandlerResponseHandlerorg/apache/http/client/ResponseHandler.java {代码...} ResponseHandler定义了handleResponse方法,用于解析HttpResponse到泛型TAbstractResponseHandlerorg/apache/http/impl/client/AbstractResponseHandler.java {代码...} AbstractResponseHandler声...

聊聊RestTemplate对HttpClient的适配

2023-10-08
阅读 11 分钟
323
org/springframework/http/client/HttpComponentsClientHttpRequestFactory.java

聊聊httpclient的监控

2023-10-07
阅读 11 分钟
371
micrometer-core-1.3.0-sources.jar!/io/micrometer/core/instrument/binder/httpcomponents/MicrometerHttpRequestExecutor.java

聊聊httpclient的evict操作

2023-10-06
阅读 9 分钟
558
HttpClientBuilder提供了evictExpiredConnections方法,该方法会设置evictExpiredConnections为true

聊聊httpclient的CPool

2023-10-05
阅读 14 分钟
404
序本文主要研究一下httpclient的CPoolConnPoolorg/apache/http/pool/ConnPool.java {代码...} ConnPool定义了lease及release方法,其中定义了两个泛型,T表示route,E表示poolEntryConnPoolControl {代码...} ConnPoolControl接口定义了设置和访问maxTotal、defaultMaxPerRoute及PoolStats的方法AbstractConnPoolorg/apa...

聊聊HttpClientBuilder

2023-10-04
阅读 16 分钟
453
httpclient-4.5.10-sources.jar!/org/apache/http/impl/client/HttpClientBuilder.java

聊聊HttpComponentsHttpInvokerRequestExecutor

2023-10-03
阅读 6 分钟
432
org/springframework/remoting/httpinvoker/HttpComponentsHttpInvokerRequestExecutor.java

聊聊druid的源码的几个疑问

2023-10-02
阅读 4 分钟
399
druid-1.2.11-sources.jar!/com/alibaba/druid/pool/DruidPooledConnection.java

聊聊druid的keepalive机制

2023-10-01
阅读 18 分钟
511
DruidDataSource的init方法在keepAlive的时候触发创建连接,当createScheduler不为null时(默认为null)执行submitCreateTask,否则执行emptySignal

聊聊druid的DestroyConnectionThread

2023-09-30
阅读 8 分钟
322
DruidDataSource的init方法会执行createAndStartDestroyThread;而createAndStartDestroyThread在destroyScheduler不为null的时候会定时(timeBetweenEvictionRunsMillis)调度destroyTask,不过destroyScheduler默认为null;同时它还启动了DestroyConnectionThread

聊聊druid连接池的监控

2023-09-29
阅读 11 分钟
580
序本文主要研究一下druid连接池的监控initcom/alibaba/druid/pool/DruidDataSource.java {代码...} DruidDataSource的init方法会执行registerMbeanregisterMbeancom/alibaba/druid/pool/DruidDataSource.java {代码...} registerMbean会执行DruidDataSourceStatManager.addDataSource(DruidDataSource.this, DruidDataSo...

聊聊druid连接池的参数配置

2023-09-28
阅读 10 分钟
991
druid-1.2.11-sources.jar!/com/alibaba/druid/pool/DruidDataSourceFactory.java

聊聊druid的handleException

2023-09-27
阅读 10 分钟
391
DruidPooledConnection的prepareStatement会catch住SQLException然后执行handleException

聊聊druid的return行为

2023-09-26
阅读 8 分钟
388
close方法先从holder获取当前的dataSource,然后判断ownerThread,若不是同一个线程则设置asyncCloseConnectionEnable为true,若asyncCloseConnectionEnable为true则执行syncClose(这里语义貌似相反),否则执行recycle方法

聊聊druid的borrow行为

2023-09-25
阅读 31 分钟
833
DruidDataSource的getConnection方法内部调用的是getConnectionDirect(maxWaitMillis)

聊聊jedis连接池参数配置

2023-09-24
阅读 11 分钟
1.4k
JedisPoolConfig继承了GenericObjectPoolConfig,同时默认配置了testWhileIdle为true(默认为false),minEvictableIdleTime为60s(默认为30分钟),timeBetweenEvictionRuns为30s(默认为-1),numTestsPerEvictionRun为-1(即检测所有空闲连接,默认值为3)

聊聊jedis的testWhileIdle

2023-09-23
阅读 14 分钟
1.1k
GenericObjectPool的evict方法在idleObjects不为空的时候会执行evict逻辑,它先通过getNumTests获取每次要对多少个idleObject进行验证,之后循环处理,首先通过evictionPolicy.evict判断是否需要evict,如果是则执行destroy方法,否则判断是否testWhileIdle,若是则先执行activateObject方法,再执行validateObject,如...

聊聊jedis的return行为

2023-09-22
阅读 10 分钟
549
RedisTemplate的execute方法先通过RedisConnectionUtils.getConnection获取连接,最后通过RedisConnectionUtils.releaseConnection来归还连接

聊聊jedis的borrow行为

2023-09-21
阅读 11 分钟
992
borrowObject方法会开启一个while循环,条件是p为null,也就是要获取到p或者是内部自己跳出循环;idleObjects.pollFirst()从连接池获取,如果为null则执行create,之后是blockWhenExhausted的判断逻辑,如果create出来的为null,则阻塞等待takeFirst或者pollFirst(borrowMaxWaitDuration),如果还是null则抛出NoSuchElem...

Java21的新特性

2023-09-20
阅读 26 分钟
3k
Java语言特性系列Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java18的新特性Java19的新特性Java20的新特性Java21的新特性Java22的新特性序本文主要讲述一下Java21的新特性版...

聊聊jedis连接池对commons-pool的封装

2023-09-19
阅读 6 分钟
1.7k
JedisPoolConfig继承了GenericObjectPoolConfig,在构造器里头设置了默认的参数,即testWhileIdle为true,minEvictableIdleTime为60s,timeBetweenEvictionRuns为30s,numTestsPerEvictionRun为-1

聊聊JedisFactory

2023-09-18
阅读 17 分钟
572
PooledObjectFactory接口定义了makeObject、destroyObject、validateObject、activateObject、passivateObject方法

聊聊基于maven的springboot的"过时"用法

2023-09-17
阅读 4 分钟
432
这种方法呢,感觉是多此一举,用application-{profile}.yml不香吗,感觉是没有用上springboot之前的maven工程的用法

聊聊SpringBootTest的webEnvironment

2023-09-16
阅读 7 分钟
447
spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/context/SpringBootTestContextBootstrapper.java

聊聊admin服务的架构模式

2023-09-15
阅读 2 分钟
412
一般而言,一个服务提供的接口有的是C端用的,有的是给B端用的,还有的是给admin用的,对于admin服务该不该访问业务服务的数据库,这里通常会有很多分歧和实践模式。这里给admin服务的定义就是给admin后台系统的前端提供http接口的服务。

聊聊spring事务的REQUIRES_NEW

2023-09-14
阅读 10 分钟
493
org/springframework/transaction/support/AbstractPlatformTransactionManager.java