H2
データベースを使ってR2DBC
のpostAllocate
/preRelease
の挙動を確認するためのSpring WebFlux
プロジェクトを作成していた所、Cannot determine database's type as ConnectionFactory is not options-capable. To be options-capable, a ConnectionFactory should be created with org.springframework.boot.r2dbc.ConnectionFactoryBuilder
というエラーが出て詰まったので、対策用の備忘録です。
あまりよく確認していませんが、OptionsCapableConnectionFactory
を使うと上手くいくようでした。
import io.r2dbc.pool.ConnectionPool import io.r2dbc.pool.ConnectionPoolConfiguration import io.r2dbc.spi.ConnectionFactories import io.r2dbc.spi.ConnectionFactory import io.r2dbc.spi.ConnectionFactoryOptions import org.springframework.boot.r2dbc.OptionsCapableConnectionFactory import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.data.r2dbc.config.AbstractR2dbcConfiguration @Configuration class R2dbcConfiguration : AbstractR2dbcConfiguration() { @Bean override fun connectionFactory(): ConnectionFactory { val h2UrlStr = "r2dbc:h2:mem:///testdb" val defaultConnectionFactory = ConnectionFactories.get(h2UrlStr) val config = ConnectionPoolConfiguration .builder(defaultConnectionFactory) .postAllocate { _ -> TODO() } .build() return OptionsCapableConnectionFactory( ConnectionFactoryOptions.parse(h2UrlStr), ConnectionPool(config) ) } }
PostgreSQL
でやっている時にはConnectionPool(config)
で上手くいくようだったため、何でH2
の時だけこれが出たのかはよく分かっていません。