首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring托管事务@ transactions注释

Spring托管事务@ transactions注释
EN

Stack Overflow用户
提问于 2017-10-17 09:18:01
回答 2查看 2.5K关注 0票数 2

需要设置传播设置。

代码语言:javascript
复制
@Transactional(propagation = Propagation.REQUIRED)

事务是读/写的。

在哪种情况下使用这些?请给我举例说明

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-17 11:52:26

Spring事务缺省值为

代码语言:javascript
复制
@Transactional(propagation = Propagation.REQUIRED)

因此,您不需要指定传播属性。

那么,@Transactional 对spring组件的注释意味着什么?

  • Spring框架将启动一个新事务并执行所有方法,最后提交事务。
  • 但是,如果application context中不存在事务,那么spring容器将启动一个新事务。
  • 如果配置为Propagation.REQUIRED的多个方法,则在逻辑上以嵌套方式分配给每个方法的事务行为,但它们都位于相同的物理事务下。

,那么,结果是什么?

结果是,如果任何嵌套事务失败,则整个事务将失败并回滚(不要在db中插入任何值),而不是提交。

示例:

代码语言:javascript
复制
@Service
public class ServiceA{

    @Transactional(propagation = Propagation.REQUIRED)
    public void foo(){
        fooB();
    }

    @Transactional(propagation = Propagation.REQUIRED)
    public void fooB(){
        //some operation
    }

}

解释:在本例中,分配了一个事务行为,而在foo()中,另一个方法fooB()被调用,它也是事务性的。在这里,fooB()foo()方面充当嵌套事务。如果fooB()由于任何原因失败,那么foo()也无法提交。相反,它倒退了。

票数 4
EN

Stack Overflow用户

发布于 2017-10-17 10:27:30

这个注释只是为了帮助Spring框架管理数据库事务。

假设您有一个写入数据库的服务bean,并且您希望确保写入是在事务中完成的,然后使用

代码语言:javascript
复制
@Transactional(propagation = Propagation.REQUIRED)

下面是Spring服务bean的一个小示例。

代码语言:javascript
复制
@Service
class MyService {

    @Transactional(propagation = Propagation.REQUIRED)
    public void writeStuff() {

      // write something to your database
    }   
}

Transactional注释告诉Spring:

  • 此服务方法需要在事务中执行。
  • 如果在执行服务方法时抛出异常,Spring将回滚事务,并且不会将数据写入数据库。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46786651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档