使用不同的事务属性调用Spring Bean的方法?

时间:2012-08-16 00:53:52

标签: java spring

如果具有某些事务属性的事务方法在具有不同事务属性的同一bean中调用方法,会发生什么?

2 个答案:

答案 0 :(得分:1)

在Spring中使用标准事务配置将会发生。从文档(在reference documentation中查看声明性事务管理的完整说明):

  

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

如果您需要在同一个bean上使用方法调用来更改事务行为(传播,只读状态等),您可以将事务模式更改为AspectJ并使用编译时间筛选(look here如何执行此操作)。但我从来没有在实际操作中这样做,只是为了测试。通常它足够默认的交易设置。

答案 1 :(得分:0)

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

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

@Transactional
void methodB(){}

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

methodA();
methodB();

将抛出只读连接异常。