Closed
Description
hello
When using AbstractRoutingConnectionFactory, Transaction Rollback does not work.
dependencies :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.13</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-r2dbc</artifactId>
<version>2.5.13</version>
</dependency>
configuration information
@Slf4j
@Configuration
@EnableR2dbcRepositories
@EnableR2dbcAuditing
@EnableTransactionManagement
class DataR2dbcConfig : AbstractR2dbcConfiguration() {
// Omit r2dbc connection information..
@Primary
@Bean("connectionFactory")
override fun connectionFactory(): ConnectionFactory {
val primaryConnectionFactory = primaryConnectionFactory()
val secondaryConnectionFactory = secondaryConnectionFactory()
val routingConnectionFactory: AbstractRoutingConnectionFactory = object : AbstractRoutingConnectionFactory() {
override fun determineCurrentLookupKey(): Mono<Any> {
return TransactionSynchronizationManager.forCurrentTransaction().map {
if (it.isActualTransactionActive) {
if (it.isCurrentTransactionReadOnly) "secondary" else "primary"
} else {
"secondary"
}
}
}
}
val factories = mapOf("primary" to primaryConnectionFactory, "secondary" to secondaryConnectionFactory)
routingConnectionFactory.setLenientFallback(true)
routingConnectionFactory.setDefaultTargetConnectionFactory(secondaryConnectionFactory)
routingConnectionFactory.setTargetConnectionFactories(factories)
return routingConnectionFactory
}
@Primary
@Bean("reactiveTransactionManager")
fun reactiveTransactionManager(@Qualifier("connectionFactory") connectionFactory: ConnectionFactory): ReactiveTransactionManager {
return R2dbcTransactionManager(TransactionAwareConnectionFactoryProxy(connectionFactory))
}
}
Transaction rollback worked normally when using only the primary connection factory.
When using AbstractRoutingConnectionFactory, the transaction doesn't seem to work properly.