@Transactional(传播= Propagation.REQUIRED)

Adi*_*dil 98 java spring annotations

如果有人可以解释这个注释的作用以及我们何时使用它:

@Transactional(propagation=Propagation.REQUIRED)
Run Code Online (Sandbox Code Playgroud)

谢谢

Bra*_*rad 156

如果您需要外围人员解释超出Spring Docs中提供的用法

考虑这段代码......

class Service {
    @Transactional(propagation=Propagation.REQUIRED)
    public void doSomething() {
        // access a database using a DAO
    }
}
Run Code Online (Sandbox Code Playgroud)

当doSomething()被调用时,它知道它必须在执行之前在数据库上启动一个Transaction.如果此方法的调用者已经启动了Transaction,则此方法将在当前数据库连接上使用相同的物理 Transaction.

@Transactional注释提供了一种在执行时告知代码必须具有事务的方法.它不能在没有一个的情况下运行,因此您可以在代码中假设您不会在数据库中留下不完整的数据,或者如果发生异常则必须清理某些内容.

交易管理是一个相当复杂的主题,所以希望这个简化的答案是有帮助的

  • 如果有人有兴趣,我发布了[类似的外行答案,比较PROPAGATION_REQUIRES_NEW,PROPAGATION_NESTED,PROPAGATION_REQUIRED](http://stackoverflow.com/questions/25076718/spring-propagation-examples-in-laymans-terms/25083505#25083505) (6认同)

Gui*_*ido 61

当传播设置为PROPAGATION_REQUIRED时,将为应用该设置的每个方法创建逻辑事务范围.每个这样的逻辑事务范围可以单独确定仅回滚状态,外部事务范围在逻辑上独立于内部事务范围.当然,在标准PROPAGATION_REQUIRED行为的情况下,所有这些范围将映射到同一物理事务.因此,内部事务范围中的仅回滚标记集确实会影响外部事务实际提交的机会(正如您所期望的那样).

在此输入图像描述

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html


K. *_*ddy 14

在Spring应用程序中,如果使用@Transactional(propagation = Propagation.REQUIRED)启用基于注释的事务支持<tx:annotation-driven/>并使用和注释任何类/方法,则Spring框架将启动事务并执行该方法并提交事务.如果发生任何RuntimeException,则将回滚事务.

实际传播= Propagation.REQUIRED是默认传播级别,您不需要明确提及它.

有关详细信息,请访问:http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations


Bit*_*map 5

要了解事务管理采取的各种事务设置和行为,如REQUIREDISOLATION等你必须了解交易管理本身的基本知识。

阅读事务管理以获取更多解释。