Open sc-etranet opened 6 months ago
It seems that one solution to disambiguate multiple Configuration instances in this case would be something like the following (using only R2DBC connection in injected DSLContexts), which would still allow liquibase/flyway migrations to work, along with Micronaut Test Resources:
import io.micronaut.context.annotation.Bean
import io.micronaut.context.annotation.Factory
import io.micronaut.context.annotation.Replaces
import io.r2dbc.spi.ConnectionFactory
import jakarta.inject.Named
import org.jooq.Configuration
import org.jooq.DSLContext
import org.jooq.impl.DSL
import org.jooq.impl.DefaultConfiguration
import javax.sql.DataSource
@Factory
class JooqFactory {
@Bean
@Named("r2dbcConfig")
fun r2dbcConfig(
datasource: DataSource,
r2dbcConnectionFactory: ConnectionFactory
) = DefaultConfiguration()
.set(datasource)
.set(r2dbcConnectionFactory)
.set(org.jooq.SQLDialect.POSTGRES)
@Bean
@Replaces(DSLContext::class)
fun jooqDslContext(
@Named("r2dbcConfig")
configuration: Configuration
) = DSL.using(configuration)
}
Expected Behavior
I have pretty basic Micronaut app(4.3.2, java 17 and kotlin) and I wanted to try jdbc, r2dbc, flyway, test-resources and project reactor just as a proof of concept. When I try to start the test in which I use my SimpleRepository I'm presented with the message below(stacktrace in 'Actual behaviour' section). SimpleRepository is injecting DslContext.
Expected behaviour: DSLContext bean should be injected without the error and repository methods should return data.
Actual Behaviour
DSLContext is not properly injected, instead the exception is thrown and repository is not returning the data.
Steps To Reproduce
gradle run
and hit endpoint http://localhost:8080/simple or start test methodtestIfRepositoryWorks
in classDemoR2dbcJava17Test
Environment Information
Example Application
https://github.com/sc-etranet/demo-r2dbc-java17
Version
4.3.2