fix(jooq): resolve DSLContext injection ambiguity#1911
fix(jooq): resolve DSLContext injection ambiguity#1911graemerocher wants to merge 1 commit into7.0.xfrom
Conversation
Co-Authored-By: Codex with GPT-5 <[email protected]>
There was a problem hiding this comment.
Pull request overview
Resolves Micronaut jOOQ DSLContext injection ambiguity when both JDBC and R2DBC configurations are present by separating configuration bean types and adjusting DSLContext bean creation/selection.
Changes:
- Introduce distinct internal
JdbcConfigurationandR2dbcConfigurationbean types (both extend jOOQDefaultConfiguration). - Update JDBC/R2DBC configuration factories to return those distinct types and refactor shared configuration setup into a generic helper.
- Create separate
DSLContextbeans for JDBC vs R2DBC configurations and add a regression spec for the combined setup.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
jooq/src/main/java/io/micronaut/configuration/jooq/AbstractJooqConfigurationFactory.java |
Refactors shared configuration wiring into configureConfiguration(T) to support distinct config subtypes. |
jooq/src/main/java/io/micronaut/configuration/jooq/JooqConfigurationFactory.java |
Produces JdbcConfiguration instead of generic Configuration. |
jooq/src/main/java/io/micronaut/configuration/jooq/R2dbcJooqConfigurationFactory.java |
Produces R2dbcConfiguration instead of generic Configuration. |
jooq/src/main/java/io/micronaut/configuration/jooq/JdbcConfiguration.java |
New internal JDBC configuration subtype to disambiguate beans. |
jooq/src/main/java/io/micronaut/configuration/jooq/R2dbcConfiguration.java |
New internal R2DBC configuration subtype to disambiguate beans. |
jooq/src/main/java/io/micronaut/configuration/jooq/DSLContextFactory.java |
Splits DSLContext creation per config type and marks the R2DBC one as primary. |
jooq/src/test/groovy/io/micronaut/configuration/jooq/DslContextFactorySpec.groovy |
Adds regression spec validating default DSLContext injection when both JDBC and R2DBC are present. |
| @Primary | ||
| @EachBean(R2dbcConfiguration.class) | ||
| DSLContext r2dbcDslContext(@Parameter R2dbcConfiguration configuration) { | ||
| return createDslContext(configuration); |
There was a problem hiding this comment.
@Primary on an @EachBean(R2dbcConfiguration.class) factory method makes every generated R2DBC DSLContext primary. If the app has multiple ConnectionFactory/R2dbcConfiguration beans (e.g., default + others), this will produce multiple primary DSLContext beans and reintroduce injection ambiguity for unqualified DSLContext injection. Consider avoiding method-level @Primary and instead expose a single primary/alias DSLContext bean that points to the desired default (e.g., the primary R2dbcConfiguration), or apply @Primary only to the default instance via qualifier-based selection.
Summary
Verification