`

Spring_事务处理

 
阅读更多

package org.springframework.transaction.annotation;

import java.lang.annotation.Annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional
{
  public abstract Propagation propagation();

  public abstract Isolation isolation();
  /**该属性用于设置事务的超时秒数,默认值为-1表示永不超时*/
  public abstract int timeout();
  /**该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false。
	例如:@Transactional(readOnly=true)*/
  public abstract boolean readOnly();
  /**该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚.例如:
	指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)
	指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, Exception.class})*/
  public abstract Class<? extends Throwable>[] rollbackFor();
  /**该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false.
	例如:@Transactional(readOnly=true)*/
  public abstract String[] rollbackForClassName();
  /**指定不回滚
  指定单一异常类:@Transactional(noRollbackFor=RuntimeException.class)
  指定多个异常类:@Transactional(noRollbackFor={RuntimeException.class, Exception.class})*/
  public abstract Class<? extends Throwable>[] noRollbackFor();
  /**该属性用于设置不需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,不进行事务回滚。例如:
	指定单一异常类名称:@Transactional(noRollbackForClassName="RuntimeException")
	指定多个异常类名称:@Transactional(noRollbackForClassName={"RuntimeException","Exception"})*/
  public abstract String[] noRollbackForClassName();
}

 

 /*@Transactional(propagation=Propagation.NESTED) 的代码解释*/
    public void methodName(){
       // 本类的修改方法 1
       update();
       // 调用其他类的修改方法
       otherBean.update();
       // 本类的修改方法 2
       update();
    }
    //other失败了不会影响 本类的修改提交成功
    //本类update的失败,other也失败
    

 

package org.springframework.transaction.annotation;

public enum Isolation
{
/**使用数据库默认的隔离级别*/
  DEFAULT(-1), 
/**允许读取改变了的还未提交的数据,可能导致脏读'不可重复读和幻读*/
  READ_UNCOMMITTED(1), 
/**允许并发事务提交之后读取,可以避免脏读,可能导致重复读和幻读*/
  READ_COMMITTED(2), 
/**对相同字段的多次读取结果一致,可导致幻读*/
  REPEATABLE_READ(4), 
/**完全服从ACID的原则,确保不发生脏读、不可重复读和幻读*/
  SERIALIZABLE(8);

  private final int value;

  private Isolation(int value)
  {
    this.value = value;
  }
  public int value() { return this.value; }

}

 

package org.springframework.transaction.annotation;

public enum Propagation
{
/**如果有事务,那么加入事务,没有的话新建一个(不写的情况下)*/
  REQUIRED(0), 
/**如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.*/
  SUPPORTS(1), 
/**必须在一个已有的事务中执行,否则抛出异常*/
  MANDATORY(2), 
/**不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务*/
  REQUIRES_NEW(3), 
/**声明方法不需要事务.如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行*/
  NOT_SUPPORTED(4), 
/**必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)*/
  NEVER(5), 
/**如果一个活动的事务存在,则运行在一个嵌套的事务中.如果没有活动事务,则按REQUIRED属性执行.它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点.内部事务的回滚不会对外部事务造成影响.它只对DataSourceTransactionManager事务管理器起效*/
/**如果当前存在一个事务,则该方法运行在一个嵌套的事务中.被嵌套的事务可以从当前事务中单独的提交和回滚.如果当前不存在事务,则开始一个新的事务.各厂商对这种传播行为的支持参差不齐,使用时需注意*/
  NESTED(6);

  private final int value;

  private Propagation(int value)
  {
    this.value = value;
  }
  public int value() { return this.value; }

}

 

分享到:
评论

相关推荐

    spring_事务管理(实例代码)

    例如,`&lt;tx:method&gt;`元素可以指定哪些方法需要进行事务处理,以及事务的隔离级别、超时时间等属性。 2. 基于注解的声明式事务管理:Spring支持在方法上使用@Transactional注解来标记需要事务管理的方法。这个注解...

    Spring_tx事务

    本篇文章将深入探讨Spring事务管理的基础知识、工作原理以及如何在实际项目中应用。 首先,事务是数据库操作的基本单位,它确保了一组操作要么全部成功,要么全部失败,从而保证了数据的完整性和一致性。在Spring中...

    Spring_2000_Spring_Hibernate_HibernateTemplate

    通过Spring的事务管理,开发者可以声明式地控制事务边界,使得事务处理更加透明和可靠。同时,Spring的AOP能力也可以用于增强HibernateTemplate,例如添加自定义的后置处理逻辑。 **文件名称列表分析** 由于只有一...

    spring_day01

    7. **事务管理**:Spring提供声明式事务管理,通过在方法上添加`@Transactional`注解,可以自动处理事务的开始、提交、回滚等操作,降低了事务管理的复杂性。 8. **Spring Boot**:Spring Boot是Spring的简化版本,...

    spring_mvc.zip_spring_spring mvc_springmvc_springmvc架构

    Spring MVC还集成了Spring框架的其他功能,如AOP(面向切面编程)用于实现事务管理、日志记录等。另外,通过ModelAndView对象,可以同时设置模型数据和视图名称,实现灵活的数据传递。 在压缩包“spring_mvc.zip”...

    Spring_Dev_Guide

    Spring Batch是处理批量操作的模块,它提供了处理大量数据的能力,包括读取、处理和写入数据。 十、Spring Cloud Spring Cloud扩展了Spring Boot,为分布式系统中的服务发现、配置管理、负载均衡等提供了工具集,是...

    全面分析_Spring_的编程式事务管理及声明式事务管理

    其他的传播行为还有 `PROPAGATION_SUPPORTS`、`PROPAGATION_MANDATORY`、`PROPAGATION_REQUIRES_NEW`、`PROPAGATION_NOT_SUPPORTED`、`PROPAGATION_NEVER` 和 `PROPAGATION_NESTED`,它们分别对应不同的事务处理策略...

    spring_day05_spring_

    3. **AOP(面向切面编程)**:Spring支持AOP,允许开发者定义“切面”,这些切面可以封装横切关注点,如日志记录、事务管理等,使得核心业务代码更简洁。 4. **Spring MVC**:Spring的Model-View-Controller架构...

    spring_api+spring_reference中文版

    Spring框架是Java开发中最常用的轻量级开源框架之一,它为开发者提供了丰富的功能,包括依赖注入、面向切面编程、事务管理以及数据访问等。"spring_api+spring_reference中文版"是一个包含Spring框架API和参考指南的...

    spring_aop.rar_spring_aop

    总之,Spring AOP是Spring框架中的一个重要特性,它使得开发者能够以声明式的方式处理系统的横切关注点,降低了代码的耦合度,提高了代码的复用性。通过深入理解和实践"spring_aop.rar_spring_aop"中的示例,开发者...

    SpringTest_springtest_spring_java_Framework_

    了解Spring框架的基本知识后,我们可以深入探讨如何配置和使用Spring的IoC容器、如何编写面向接口的代码并通过依赖注入实现解耦、如何使用AOP进行横切关注点的处理,如日志记录和事务管理。此外,还可以学习Spring ...

    spring_tx编程式事务代码

    总结来说,`Spring_tx编程式事务代码`主要涉及Spring的`TransactionTemplate`类,它是Spring事务管理的一种便捷工具,可以帮助开发者以编程的方式更加方便地控制事务的生命周期,同时保持代码的简洁和可维护性。...

    spring_AOP.rar_876.aop_java aop_spring_aop

    在SSH(Struts、Spring、Hibernate)经典企业级开发框架中,Spring AOP扮演着至关重要的角色,用于实现如日志记录、事务管理、权限控制等跨切面的关注点。 首先,了解AOP的基本概念。面向切面编程是一种编程范式,...

    iBATIS_Spring_struts_demo.rar_DEMO_Struct spring ibatis_ibatis j

    3. **事务管理**:Spring的事务管理支持可以轻松处理跨多层的事务边界。 4. **可测试性**:由于组件间依赖关系明确,单元测试和集成测试变得更加方便。 文件“iBATIS_Spring_struts_demo”很可能是这个项目的源码包...

    Spring2.0 事务处理

    Spring 2.0版本在事务处理方面做了许多改进,使得开发者能够更有效地管理应用程序的事务边界。这篇博客将深入探讨Spring 2.0中的事务处理机制,以及如何通过`applicationContext.xml`配置文件来设置和管理事务。 ...

    java_spring_day04.pdf

    事务处理是软件开发中的关键概念,尤其是在涉及数据库操作的场景下。Spring提供了强大的事务管理功能,可以通过配置式或编程式的方式实现对事务的控制。 #### 实现步骤: 1. **配置事务管理器**:通常在Spring配置...

    spring_声明式事务_xml事务的书写.zip

    声明式事务是Spring框架的一大亮点,它允许开发者无需在业务代码中显式处理事务,而是通过配置来控制事务的边界。 首先,我们要理解什么是事务。在数据库操作中,事务是一组原子操作,要么全部完成,要么全部回滚。...

    spring_cxf_lib

    - **事务管理**:利用Spring的事务管理能力,确保服务操作的一致性和原子性。 - **AOP集成**:可以定义切面来处理跨切面的关注点,如日志记录、性能监控等。 为了开始使用"Spring_CXF_Lib",开发者首先需要将压缩包...

    spring_part2

    Spring事务管理的核心是基于AOP(面向切面编程)的,它可以透明地在业务代码中应用事务控制。Spring支持编程式事务管理和声明式事务管理两种模式。编程式事务管理需要在代码中显式调用begin、commit和rollback等方法...

Global site tag (gtag.js) - Google Analytics