spring-projects-experimental / spring-fu

Configuration DSLs for Spring Boot
Apache License 2.0
1.67k stars 139 forks source link

How to set R2dbcCustomConversions while using @SpringBootApplication? #353

Closed peterfigure closed 3 years ago

peterfigure commented 3 years ago

when simply declaring a bean of type R2dbcCustomConversions, it fails with:

00:36:33.182 [restartedMain] ERROR o.s.boot.SpringApplication - Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.data.r2dbc.mapping.R2dbcMappingContext': Unexpected exception during bean creation; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.data.r2dbc.convert.R2dbcCustomConversions' available: expected single matching bean but found 2: org.springframework.data.r2dbc.convert.R2dbcCustomConversions#0,org.springframework.data.r2dbc.convert.R2dbcCustomConversions

something like

configuration {
  beans {
    bean<R2dbcCustomConversions> {}
  }
  r2dbc {
  }
}

even though I notice the bean declared in R2dbcDataAutoConfiguration is declared conditionally:

    @Bean
    @ConditionalOnMissingBean
    public R2dbcCustomConversions r2dbcCustomConversions() {

I believe the above bean is created first (by virtue of @SpringBootApplication), this will make it challenging to partly adopt the kofu DSL which seems to be the desire for others also (https://github.com/spring-projects-experimental/spring-fu/issues/335). My only work around for now is to not use the R2DBC DSL and manually create the required beans.

Sample project illustrating the problem: https://github.com/peterfigure/minimal-kofu - In com.peterfigure.config.ApplicationConfigurationDSL please uncomment bean<R2dbcCustomConversions>() to see the issue.

sdeleuze commented 3 years ago

Good question, this will be clarified as part of #359.