diff --git a/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAspectSupport.java b/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAspectSupport.java index 9ae7a02927..6513dbc6ab 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAspectSupport.java +++ b/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAspectSupport.java @@ -875,8 +875,8 @@ public abstract class TransactionAspectSupport implements BeanFactoryAware, Init String joinpointIdentification = methodIdentification(method, targetClass, txAttr); - // Optimize for Mono - if (Mono.class.isAssignableFrom(method.getReturnType())) { + // For Mono and suspending functions not returning kotlinx.coroutines.flow.Flow + if (Mono.class.isAssignableFrom(method.getReturnType()) || (KotlinDetector.isSuspendingFunction(method) && !COROUTINES_FLOW_CLASS_NAME.equals(new MethodParameter(method, -1).getParameterType().getName()))) { return TransactionContextManager.currentContext().flatMap(context -> createTransactionIfNecessary(rtm, txAttr, joinpointIdentification).flatMap(it -> { try { diff --git a/spring-tx/src/test/kotlin/org/springframework/transaction/annotation/CoroutinesAnnotationTransactionInterceptorTests.kt b/spring-tx/src/test/kotlin/org/springframework/transaction/annotation/CoroutinesAnnotationTransactionInterceptorTests.kt index cb66de8f06..76dde1c9fd 100644 --- a/spring-tx/src/test/kotlin/org/springframework/transaction/annotation/CoroutinesAnnotationTransactionInterceptorTests.kt +++ b/spring-tx/src/test/kotlin/org/springframework/transaction/annotation/CoroutinesAnnotationTransactionInterceptorTests.kt @@ -19,7 +19,6 @@ package org.springframework.transaction.annotation import kotlinx.coroutines.delay import kotlinx.coroutines.runBlocking import org.assertj.core.api.Assertions -import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.Test import org.springframework.aop.framework.ProxyFactory import org.springframework.transaction.interceptor.TransactionInterceptor @@ -64,7 +63,6 @@ class CoroutinesAnnotationTransactionInterceptorTests { } @Test - @Disabled("Currently fails due to gh-25998") fun suspendingValueSuccess() { val proxyFactory = ProxyFactory() proxyFactory.setTarget(TestWithCoroutines())