micronaut-data
micronaut-data copied to clipboard
Micronaut 3.6.1 Multiple possible bean candidates found: [io.micronaut.transaction.async.AsyncTransactionOperations, io.micronaut.transaction.async.AsyncTransactionOperations]
Expected Behavior
After upgrading to 3.6.1 app should work as it works in 3.5
Actual Behaviour
After upgrading to 3.6.1 we get duplicate bean exceptions, we do not have any hardcoded deps, things just stop working.
Message: Multiple possible bean candidates found: [io.micronaut.transaction.async.AsyncTransactionOperations, io.micronaut.transaction.async.AsyncTransactionOperations]
Path Taken: new DuplicatedBeansTest(AsyncTransactionOperations bean) --> new DuplicatedBeansTest([AsyncTransactionOperations bean])
at io.micronaut.context.AbstractInitializableBeanDefinition.resolveBean(AbstractInitializableBeanDefinition.java:2087)
at io.micronaut.context.AbstractInitializableBeanDefinition.getBeanForConstructorArgument(AbstractInitializableBeanDefinition.java:1297)
at com.example.$DuplicatedBeansTest$Definition.build(Unknown Source)
at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2354)
at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2305)
at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:2251)
at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:3016)
at io.micronaut.context.SingletonScope.getOrCreate(SingletonScope.java:80)
at io.micronaut.context.DefaultBeanContext.findOrCreateSingletonBeanRegistration(DefaultBeanContext.java:2918)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2879)
at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2800)
at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:1680)
at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:1655)
at io.micronaut.context.DefaultBeanContext.findBean(DefaultBeanContext.java:878)
at io.micronaut.context.BeanLocator.findBean(BeanLocator.java:291)
at io.micronaut.test.extensions.kotest.MicronautKotestContext.
Steps To Reproduce
Provided minimal reproducer, just run tests
./gradlew check
Environment Information
OS: Arch JDK: 11
Example Application
https://github.com/riomus/micronaut_361_problem
Version
3.6.1
I see you are using JDBC with R2DBC. I will try to look for a fix.
BTW Why are you adding explicitly testResourcesImplementation dependencies?
Right that could be removed, in our repo we are reimplementing postgres resource to reuse containers in order to improve startup times
@riomus Essentially, it is correct, you cannot have multiple datasources with the same name. The transactional aspect at this moment will try to resolve the transactional manager by the named qualifier, which in this case is the same.
Before, it might have worked and caused some unexpected behavior.
So how should we reconfigure our app, we need to have both jdbc and r2dbc in our app, liquibase is using JDBC, r2dbc is used in some parts of our code (but jdbc also)
We do not have multiple jdbc and r2dbc, we have just two defaults, one for jdbc and one for r2dbc
I added an example here https://github.com/micronaut-projects/micronaut-data/pull/1717