【发布时间】:2021-03-27 09:02:29
【问题描述】:
我正在尝试使用 AspectJ 同步声明性事务(即用 @Transactional 注释的方法),如下所示:
...
import org.aspectj.lang.annotation.Aspect;
...
@Component
@Aspect
public class TransactionMonitor extends TransactionSynchronizationAdapter {
@Before("execution(@org.springframework.transaction.annotation.Transactional * *.*(..))")
private void registerTransactionSynchronizationOnAnnotation(JoinPoint joinPoint) {
TransactionSynchronizationManager.registerSynchronization(this);
}
}
这当前失败并显示java.lang.IllegalStateException: Transaction synchronization is not active,这表明同步不是在事务执行内部运行,而是在之前运行。当然,我想确保这是相反的情况。
我找到了this answer,但是@Order(Ordered.LOWEST_PRECEDENCE)没有效果,并且
@DeclarePrecedence(
"org.springframework.transaction.aspectj.AnnotationTransactionAspect, xxx.xxx.TransactionMonitor, *"
)
在启动期间导致此问题:
java.lang.IllegalArgumentException: DeclarePrecedence not presently supported in Spring AOP
我觉得这是 AOP 和 AspectJ 彼此不满意,但我不确定。我很感谢任何想法。
编辑:我必须使用@EnableTransactionManagement(proxyTargetClass = true),这可能与问题有关吗?
【问题讨论】:
标签: spring transactions aspectj spring-aop spring-transactions