Spring配置介绍(三)

事务处理是spring核心的一部分,这次参考的是spring-tx-3.0.xsd

advice

 

advice是事务处理的主要的节点,他是AOP的一个扩展,AOP面向切面 ,而advice处理事务也是通过aop切面实现的,我们知道aop处理时,需要定义切面类,但事务是AOP一种应用,所以他使用的是TransactionInterceptor这个类来实现事务处理



 

 

支持两个节点属性idtransaction-manager

id:advice的唯一性,在逻辑上可能没有什么太多的用处

transaction-manager:事务管理器,如果这个属性没有传,则默认为

transaction-manager="transactionManager",这个里面配置的是事务管理器的bean

这个类需要是PlatformTransactionManager的子类,可以自己定制,但这里需要自己配置springBean,

 

再看一下他的子节点。



 

spring处理advice时,子节点,最多只能有一个attribute的子节点。如果没有可以默认,如果多个,spring启动将直接报错

Attribute有一个子节点节,method,如上图所示,可以看出,method可以支持多个的,是一对多的关系。

Namename也是支持表达式,他是一系列method的名称。

Propagation:事务一致性,参见下面的列表 ,(这个是我从某博客上贴过来的http://www.blogjava.net/wmcoo/articles/333831.html,也可以参考spring源码TransactionDefinition.java),默认为PROPAGATION_REQUIRED

         PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS
:支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY
:支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW
:新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED
:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER
:以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED
:支持当前事务,如果当前事务存在,则执行一个嵌套事务(还不是太明白),如果当前没有事务,就新建一个事务。

Isolation:这个与Propagation一样,我从某博客上贴出来的,同样可以参考spring源码TransactionDefinition.java,默认为DEFAULT

1 ISOLATION_DEFAULT 默认的隔离级别
下面几个都是
 JDBC isolation levels 一一对应:
2 ISOLATION_READ_UNCOMMITTED Connection.TRANSACTION_READ_UNCOMMITTED
指示防止发生脏读的常量;不可重复读和虚读有可能发生。

3 ISOLATION_READ_COMMITTED Connection.TRANSACTION_READ_COMMITTED
指示可以发生脏读
 (dirty read)、不可重复读和虚读 (phantom read) 的常量。
4 ISOLATION_REPEATABLE_READ Connection.TRANSACTION_REPEATABLE_READ
指示防止发生脏读和不可重复读的常量;虚读有可能发生。

5 ISOLATION_SERIALIZABLE Connection.TRANSACTION_SERIALIZABLE
指示防止发生脏读、不可重复读和虚读的常量。

Timeout:事务超时,默认-1,无超时,单位为秒

read-only:默认为false,表示是否支持只读着事物,他是事务的一种属性,如果为true,如果出现操作类型的,将会报错

rollback-for:在sprring的处理中,如果遇到runtimeException便会回滚,当然spring支持自定义,当抛出特定的异常时,便才回滚事务,其它异常数据不回滚

no-rollback-for:同理,控制哪些特定的异常不回滚事务。其它异常回滚事务。

 

 

jta-transaction-manager:


看图可看出,其实这个节点什么都没有,所以在声明时只需要这样就可以了

<tx:jta-transaction-manager></tx:jta-transaction-manager>

便可实现 。其实内部看到配置了jta,就会自动生成一条名为transactionManagerspringbean,通过jta管理事务,默认为:

org.springframework.transaction.jta.JtaTransactionManager

现在我们想想之前transaction-manager,便可知道他们可以搭配使用

 

annotation-driven



 

 

这里是通过注解方式对事物进行管理的一种声明。

Mode:事务方式,有两种取值,aspectjproxy,默认是代理模式

transaction-manager:与advice中的transaction-manager方式一样的。

proxy-target-classtruefalse两种,默认为false,表示是否启用代理,当然这个只会在mode=”proxy”情况下才会读取,如果为false,那么默认代理 ,如果为true,可能就需要自动生成 代理 类,可能 需要CGLIB能力。

Order:与上一篇AOP说的order一样。

总结:

 

其它上面做的东西,都是事务的一种声明或定义,刚开始也说了,他只是一种AOP的实例,如果要在流程中使用,还是要通过配置切面真正的使用起来。可以在aop:configadvice-ref去引用。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值