DataAccessResourceFailureException: Failed to obtain R2DBC Connection
R2DBC
를 통해서 쿼리를 정상적으로 호출하다가, 위의 예외가 발생 io.r2dbc.r2dbc-pool
를 통해서, 커넥션 풀을 설정할 수 있었음Dependency
추가implementation("io.r2dbc:r2dbc-pool:1.0.0.RELEASE")
@Bean
추가 @Bean
fun connectionFactory(): ConnectionFactory {
val connectionFactory = ConnectionFactories.get(
builder()
.option(DRIVER, "pool")
.option(PROTOCOL, "mysql")
.option(HOST, mysql.url)
.option(PORT, mysql.port.toInt())
.option(USER, mysql.username)
.option(PASSWORD, mysql.password)
.option(DATABASE, mysql.database)
.build()
)
val configuration: ConnectionPoolConfiguration =
ConnectionPoolConfiguration
.builder(connectionFactory)
.initialSize(2)
.maxSize(10)
.maxLifeTime(Duration.ofSeconds(600))
.maxIdleTime(Duration.ofSeconds(600))
.build()
return ConnectionPool(configuration)
}
maxSize
는 일반적으로 사용하는 10개를 지정헀지만, 실제로는 응답속도, DB 시스템 관리자와 협의가 필요해보임maxLifeTime
, 커넥션의 생명 주기를 600초로 지정하여 슬로우 쿼리 방지maxIdleTime
, 커넥션 재사용에 가장 핵심인 부분, 600초동안 사용되지 않더라도 커넥션을 해제하지 않음
잘 봤습니다. 좋은 글 감사합니다.