`
zl198751
  • 浏览: 278459 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring annotation 申明事务

阅读更多

对于Spring的一个注册容器相当于一个事务,所以其中的方法调用 都在一个事务当中。

对于Spring注册的容器才能使用事务

对于事务Propagation.REQUIRED是将注册方法的事务加入到调用者的事务当中形成一个事 务;Propagation.REQUIRES_NEW是将注册方法的事务执行完毕后再执行调用者的事务,是两个事务。

示例:

容器A中

    @Transactional(rollbackFor=MyException.class, propagation=Propagation.REQUIRES_NEW)
    public void test() throws MyException {
        Project p = new Project();
        p.setName("service tran1");
        dao.save(p);
        service.test();   ---------------调用容器B的test()
    }  

 

容器B中

@Transactional(rollbackFor=MyException.class, propagation= Propagation.REQUIRED)
    public void test() throws MyException {
        Project p = new Project();
        p.setName("service2 tran1");
        dao.save(p);
        throw new MyException();
    }

当B的事务申明为 propagation= Propagation.REQUIRED时,B的事务加入到A形成一个事务,所以B检查到需要回滚后,这个新形成的事务回滚,A的数据也没有保存。

如果B的事务申明为propagation=Propagation.REQUIRES_NEW,那么B的事务是先commit再执行A的事务,那 么A的数据依然保存。

以下是载录网上内容:

Spring annotation对事务的管理

spring 事务管理器,由spring 来 负责数据库的打开,提交,回滚.默认遇到运行期例外
(throw new RuntimeException("注释");)会回滚:unchecked,需要捕获的例外(throw
new Exception("注释");)不会回滚:checked.

需要修改规则加入注释:

@Transactional(rollbackFor=Exception.class) //指定回滚,需要捕获的例外(throw
new Exception("注释");)不会回滚
    public void methodName() {
       throw new Exception("注释");
       
    }

@Transactional(noRollbackFor=Exception.class)// 指定不回滚,遇到运行期例外
(throw new RuntimeException("注释");)会回滚
    public ItimDaoImpl getItemDaoImpl() {
        throw new RuntimeException("注释");
    }

//事务传播属性
    @Transactional(propagation=Propagation.REQUIRED) //如果有事务,那么加入事
务,没有的话 新建一个(不写的情况下)
    @Transactional(propagation=Propagation.NOT_SUPPORTED) //容器不为这个方法
开启事务
    @Transactional(propagation=Propagation.REQUIRES_NEW) //不管是否存在事务,
都创建 一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
    @Transactional(propagation=Propagation.MANDATORY) //必须在一个已有的事务中
执行,否则 抛出异常
    @Transactional(propagation=Propagation.NEVER) //必须在一个没有的事务中执
行, 否则抛出异常(与Propagation.MANDATORY相反)
    @Transactional(propagation=Propagation.SUPPORTS) //如果其他bean调用这个方
法,在其 他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.
   
    /*public void methodName(){
        update();//本类的修改方法 1
            otherBean.update();//调用其他类的修改方法
        update();//本类的修改方法 2
    }
    other失败了不会影响 本类的修改提交成功
    本类update的失败,other也失败
    */
  @Transactional(propagation=Propagation.NESTED)

  @Transactional (propagation =
Propagation.REQUIRED,readOnly=true) //readOnly=true只读,不能更新,删除

@Transactional (propagation = Propagation.REQUIRED,timeout=30)//设置超时时间

@Transactional (propagation =
Propagation.REQUIRED,isolation=Isolation.DEFAULT)//设置 数据库隔离级别

 

分享到:
评论

相关推荐

    Spring Annotation简介一

    【Spring Annotation简介一】 在Java开发领域,Spring框架以其强大的功能和灵活性深受广大开发者喜爱。Spring Annotation是Spring框架中的一个重要特性,它极大地简化了配置,提高了代码的可读性和可维护性。这篇...

    Spring annotation

    - `@DataJpaTest`: 针对Spring Data JPA的测试,包括事务管理。 - `@MockBean`: 在测试上下文中创建一个mock bean,替代真实的bean。 - `@Import`: 引入额外的配置类到测试上下文。 Spring注解的使用大大减少了...

    spring annotation注解

    Spring Annotation 注解 Spring 框架中的注解是用于在 Java 类中添加元数据的,通过这些元数据,Spring 框架可以在运行时提供更多的功能。 Spring 框架提供了多种类型的注解,例如 @Autowired、@Resource、@...

    spring 的Annotation方式

    ### Spring的Annotation方式详解 #### 引言 随着Spring框架的发展,其依赖注入(DI)机制也经历了从XML配置向注解驱动的重大转变。自Spring 3.0版本起,框架引入了一系列注解来简化依赖配置,使得开发人员能够在不...

    spring的Annotation注解.

    ### Spring框架中的Annotation注解详解 #### 一、Spring与Annotation的基本概念 Spring框架通过引入Annotation,极大地简化了Java开发中的依赖注入(Dependency Injection, DI)和面向切面编程(AOP)的过程。...

    spring的annotation-driven配置事务管理器详解 (多数据源配置

    Spring 的 Annotation-Driven 配置事务管理器详解(多数据源配置) Spring 框架提供了强大的事务管理机制,通过使用 Annotation-Driven 配置,可以方便地管理事务。在多数据源配置中,spring 的 Annotation-Driven...

    Spring的Annotation配置相关讲义

    在Spring框架中,Annotation配置是一种简洁且强大的方式来管理Bean的定义和依赖注入,它消除了传统的XML配置文件,使得代码更加简洁、易读。在Spring 3.0及以上版本中,Annotation配置得到了广泛的应用。 首先,...

    Spring注释 注入方式源码示例,Annotation

    花了些时间做了一个实验,彻底弄懂了spring Annotation注入的方式。凡带有@Component,@Controller,@Service,@Repository 标志的等于告诉Spring这类将自动产生对象,而@Resource则等于XML配置中的ref,告诉spring此处...

    利用 spring annotation AOP 反射 记录日志

    面向切面编程是一种编程范式,它允许我们将关注点(如日志、事务管理等)从主业务逻辑中分离出来,形成独立的“切面”。在Spring框架中,AOP主要通过代理模式实现,可以分为基于XML配置和基于注解两种方式。本例中,...

    SpringIOC_SpringMVC_SpringAnnotation_JPA

    标题 "SpringIOC_SpringMVC_SpringAnnotation_JPA" 涵盖了四个核心的Java开发框架技术,它们是Spring框架的重要组成部分。Spring框架是一个开源的应用框架,它为Java开发者提供了一个全面的基础设施,用于构建可扩展...

    Spring_Annotation_AOP

    在本资料"Spring_Annotation_AOP"中,我们将深入探讨Spring框架如何利用注解实现AOP,以及其背后的原理和实践应用。 面向切面编程(AOP)是一种编程范式,旨在提高代码的可维护性和可重用性,通过将关注点分离,...

    实验 spring 声明事务

    实验 "Spring 声明事务" 是 Java 高级编程中的一个重要环节,旨在让学生掌握 Spring 框架中声明式事务管理的配置和使用。在实际应用中,事务管理是确保数据一致性、完整性和可靠性的关键组件。Spring 提供了声明式...

    Spring 常用 Transaction Annotation

    最后,结合`Book1.xlsx`这个文件名,虽然它看起来像一个Excel文件,但在这里没有提供具体的文件内容,所以无法直接关联到Spring事务注解的知识点。通常,这样的文件可能包含有关Spring事务管理的示例数据、测试用例...

    Spring JDBC与事务管理

    3、了解Spring事务管理的3个核心接口; 4、了解Spring事务管理的两种方式; 5、掌握基于XML和Annotation的声明式事务管理的使用。 二.实验内容 (1)使用Spring JDBC实现书店的购书过程,即有如下一个BookShopDao接口...

    spring声明式事务处理demo

    首先,我们要理解Spring事务管理的两种主要方式:编程式事务管理和声明式事务管理。编程式事务管理通常通过AOP(面向切面编程)的TransactionTemplate或PlatformTransactionManager接口直接在代码中控制事务,而声明...

    使用Spring的声明式事务----Annotation注解方式

    本篇文章将深入探讨如何使用Spring的声明式事务,特别是通过Annotation注解方式进行设置。 首先,我们需要理解什么是声明式事务。与编程式事务(即手动编写事务管理代码)不同,声明式事务是通过AOP(面向切面编程...

    Spring MVC Annotation验证的方法

    Spring MVC Annotation验证方法 Spring MVC 框架提供了多种验证方法,其中一种常用的方式是使用Annotation验证。本文将详细介绍 Spring MVC Annotation验证的方法,包括使用 Spring MVC 自带的 Annotation 验证和...

Global site tag (gtag.js) - Google Analytics