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; }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值