Problem
OkapiMicrometerAutoConfiguration.micrometerOutboxMetrics() initiate Spring bean without considering multiple PlatformTransactionManagers. In this case, the init fails with exception:
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.transaction.PlatformTransactionManager' available: expected single matching bean but found 2: cfmTransactionManager,storeTransactionManager at app//org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:218) at app//org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1747) at app//org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.getIfAvailable(DefaultListableBeanFactory.java:2559) at app//com.softwaremill.okapi.springboot.OkapiMicrometerAutoConfiguration.micrometerOutboxMetrics(OkapiMicrometerAutoConfiguration.kt:57) at java.base@25.0.2/java.lang.reflect.Method.invoke(Method.java:565) at app//org.springframework.beans.factory.support.SimpleInstantiationStrategy.lambda$instantiate$0(SimpleInstantiationStrategy.java:172) ... 114 more
Solution
Refactor OutboxAutoConfiguration.resolvePlatformTransactionManager() into a common function for both OkapiMicrometerAutoConfiguration and OutboxAutoConfiguration. Then use resolvePlatformTransactionManager() in both configurations.
Problem
OkapiMicrometerAutoConfiguration.micrometerOutboxMetrics()initiate Spring bean without considering multiplePlatformTransactionManagers. In this case, the init fails with exception:Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.transaction.PlatformTransactionManager' available: expected single matching bean but found 2: cfmTransactionManager,storeTransactionManager at app//org.springframework.beans.factory.config.DependencyDescriptor.resolveNotUnique(DependencyDescriptor.java:218) at app//org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1747) at app//org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.getIfAvailable(DefaultListableBeanFactory.java:2559) at app//com.softwaremill.okapi.springboot.OkapiMicrometerAutoConfiguration.micrometerOutboxMetrics(OkapiMicrometerAutoConfiguration.kt:57) at java.base@25.0.2/java.lang.reflect.Method.invoke(Method.java:565) at app//org.springframework.beans.factory.support.SimpleInstantiationStrategy.lambda$instantiate$0(SimpleInstantiationStrategy.java:172) ... 114 moreSolution
Refactor
OutboxAutoConfiguration.resolvePlatformTransactionManager()into a common function for bothOkapiMicrometerAutoConfigurationandOutboxAutoConfiguration. Then useresolvePlatformTransactionManager()in both configurations.