调用具有不同事务属性的春豆方法?



如果具有某些事务属性的事务方法调用具有不同事务属性的同一 Bean 上的方法,会发生什么情况?

在 Spring 中,标准事务配置不会发生。从文档(查看参考文档以获取声明式事务管理的完整说明):

在代理模式(默认模式)中,仅外部方法调用 通过代理进入将被拦截。这意味着 自调用,实际上是目标对象调用中的一个方法 目标对象的另一种方法,不会导致实际 运行时的事务,即使调用的方法标记为 @Transactional。

如果您需要使用同一 Bean 上的方法调用来更改事务行为(传播、只读状态等),您可以将事务模式更改为 AspectJ 并使用编译时切换(查看此处如何执行此操作)。但我从来没有在实际实践中这样做过,只是为了测试。通常,默认事务设置就足够了。

@Transactional 的 readOnly 属性具有以下异常:

@Transactional(readOnly=true)
void methodA(){}
@Transactional
void methodB(){}

如果你像这样调用方法,并且你使用Hibernate或其他ORM平台:

methodA();
methodB();

将引发只读连接异常。

最新更新