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の時だけこれが出たのかはよく分かっていません。