의존성
implementation("io.asyncer:r2dbc-mysql:1.0.2") // R2DBC MySQL Driver
implementation("io.r2dbc:r2dbc-h2:1.0.0.RELEASE")
꽤 tricky 하게 yml로 설정한 auto configuration을 이용할 수 있음.
url 부분에 "pool"이 들어가지 않는 것이 핵심!
r2dbc pooling 공식문서에서 얘기하는 "r2dbc:pool:mysql"을 사용하는 방법은 Configuration을 (yml을 사용하지 않고) 직접 해줄 때 사용하는 방법이다.
spring:
r2dbc:
url: 'r2dbc:mysql://localhost:3306/database?option1=value1'
username: 'root'
password: ''
pool:
enabled: true
initial-size: 10
max-acquire-time: 5s
max-create-connection-time: 5s
max-idle-time: 60m # max-wait-time 이랑 같이 챙겨 줘야 함.
max-life-time: 60m
max-size: 10
logging:
level:
io.r2dbc.pool: DEBUG
reactor.pool: DEBUG
io.r2dbc.pool.ConenctionPool
은ConnectionFactory
를 구현했고 내부적으로 다른ConnectionFactory
를 갖고 있음. 일종의 Decorator pattern- 그리고 내부적으로
reactor.pool.InstrumentedPool
를 갖고 있는데 (구현체는 같은 패키지의SimpleDequePool
) 실제 connection 취득은 다른 factory를 / pooling은 이 InstrumentedPool을 사용하고 있다. - SQL
show status like 'Threads_connected';
을 통해 정상적으로 10개의 connection pooling이 되는 것을 확인할 수 있음.
'개발 공부 기록하기 > 02. DB & SQL' 카테고리의 다른 글
내맘대로 정리하는 Real MySQL #16 #17장) 베스트 프랙티스와 응급처치 (0) | 2020.09.14 |
---|---|
내맘대로 정리하는 Real MySQL #14 #15장) 데이터 모델링과 데이터 타입 (0) | 2020.09.08 |
내맘대로 정리하는 Real MySQL #13.1장) 프로그램 연동 (JDBC) (0) | 2020.09.06 |
내맘대로 정리하는 Real MySQL #12장) 쿼리 종류별 잠금 (0) | 2020.09.04 |
내맘대로 정리하는 Real MySQL #9장) 사용자 정의 변수 (0) | 2020.09.02 |