池化配置
2024年8月1日大约 2 分钟通用属性
[一]对象池配置
很多常见组件的 SDK 或者 API 的使用方法,均是实例化一个 XXXClient 对象,然后利用该对象对具体的组件进行操作。例如:AWS S3 中的 S3AsyncClient
,InfluxDB 中的 InfluxDBClient
等等。常规使用中,通常是将此类对象实例化为一个单例,或者 Spring Boot 中的 Bean,然后在代码中统一使用。
一般来说,这种使用方式没有任何问题。但是随着技术的发展以及对性能和吞吐能力需求的提升,大量产品或者组件的 SDK 慢慢的逐步改为异步调用方式。异步操作就意味着原来的阻塞式逻辑变为多线程逻辑,那么原有单例方式实例化核心对象的操作方式就很难满足并发需求。
为了解决这个问题,Dante Cloud 对于此类对象的使用均改为"池"化对象方式。即构建一个对象池,在使用时生成多个核心对象实例,随用随取。类似于连接数据库的线程池,这样可以有效规避异步操作带来的时序不一致以及单一实例多线程操作不稳定问题。同时,减少反复创建和关闭连接带来的损耗。
max-total
- Type:
Integer
- Default:
8
池中的最大对象数
max-idle
- Type:
Integer
- Default:
8
最多的空闲对象数
min-idle
- Type:
Integer
- Default:
0
最少的空闲对象数
lifo
- Type:
Boolean
- Default:
true
对象池存放池化对象方式,true放在空闲队列最前面,false放在空闲队列最后
max-wait
- Type:
Duration
- Default:
-1L
当连接池资源耗尽时,调用者最大阻塞的时间,超时时抛出异常。-1L 意味着立即抛出。
注
需要使用 Spring Boot Duration 类型参数配置的格式进行配置
- ns for nanoseconds (纳秒)
- us for microseconds (微秒)
- ms for milliseconds (毫秒)
- s for seconds (秒)
- m for minutes (分)
- h for hours (时)
- d for days (天)
block-when-exhausted
- Type:
Boolean
- Default:
true
对象池满了,是否阻塞获取(false则借不到直接抛异常), 默认 true
min-evictable-idle-duration
- Type:
Duration
- Default: 30m
空闲的最小时间,达到此值后空闲连接可能会被移除, 默认30分钟
注
需要使用 Spring Boot Duration 类型参数配置的格式进行配置
- ns for nanoseconds (纳秒)
- us for microseconds (微秒)
- ms for milliseconds (毫秒)
- s for seconds (秒)
- m for minutes (分)
- h for hours (时)
- d for days (天)
soft-min-evictable-idle-duration
- Type:
Duration
- Default: -1
软最小可清除空闲持续时间
注
需要使用 Spring Boot Duration 类型参数配置的格式进行配置
- ns for nanoseconds (纳秒)
- us for microseconds (微秒)
- ms for milliseconds (毫秒)
- s for seconds (秒)
- m for minutes (分)
- h for hours (时)
- d for days (天)