事务管理

atomic(原子性):要么都发生,要么都不发生。consistent(一致性):数据应该不被破坏。Isolate(隔离性):用户间操作不相混淆Durable(持久性):永久保存,例如保存到数据库中等
Spring提供了两种事务管理方式:编程序事务管理声明式事务管理 编程序事务管理编写程序式的事务管理可以清楚的定义事务的边界,可以实现细粒度的事务控制,比如可以通过程序代码来控制你的事务何时开始,何时结束等,与下面的声明式事务管理相比,它可以实现细粒度的事务控制。 声明式事务管理如果并不需要细粒度的事务控制,可以使用声明式事务,在Spring中,只需要在Spring配置文件中做一些配置,即可将操作纳入到事务管理中,解除了和代码的耦合,这是对应用代码影响最小的选择,从这一点再次验证了Spring关于AOP的概念。当不需要事务管理的时候,可以直接从Spring配置文件中移除该设置.需要引入用于事务管理的命名空间(tx).Spring并没有直接管理事务,而是将事务的管理委托给其他的事务管理器实现.Spring支持的事务管理器: org.springframework.jdbc.datasource.DataSourceTransactionManager (在单一的JDBC Datasource中的管理事务)org.springframework.orm.hibernate3.HibernateTransactionManager (当持久化机制是hibernate时,用它来管理事务)org.springframework.jdo.JdoTransactionManager (当持久化机制是Jdo时,用它来管理事务)org.springframework.transaction.jta.JtaTransactionManager (使用一个JTA实现来管理事务。在一个事务跨越多个资源时必须使用)org.springframework.orm.ojb.PersistenceBrokerTransactionManager (当apache的ojb用作持久化机制时,用它来管理事务)基于XML文件配置事务管理器: <tx:advice id=“advice” transaction-manager=“txManager”> tx:attributes <tx:method name=“save*” propagation=“REQUIRED” isolation=“DEFAULT” read-only=“false”/> <tx:method name=“update*” propagation=“REQUIRED” isolation=“DEFAULT” read-only=“false”/> <tx:method name=“delete*” propagation=“REQUIRED” isolation=“DEFAULT” read-only=“false”/> <tx:method name="" read-only=“true”/> </tx:attributes></tx:advice> aop:config <aop:pointcut id=“perform” expression="execution( .(…))"/> <aop:advisor advice-ref=“advice” pointcut-ref=“perform”/></aop:config> 配置完事务管理器后,再常规的配置Bean注入对象.默认只有运行时异常才将导致事务回滚.基于注解配置事务管理器:XML配置文件中只需要声明事务管理器,而不需要给它"灵魂",因为"灵魂"是由注解注入,所以需要注解解析器的支持:<tx:annotation-driven transaction-manager=“txManager”/>注册对事务注解进行解析的处理器,将注解与事务管理器关联起来即可./** * 方法的事务设置将被优先执行。 * 例如: BusinessService类在类的级别上被注解为只读事务, * 但是,这个类中的 save 方法的@Transactional 注解的事 * 务设置将优先于类级别注解的事务设置。 * 默认的 @Transactional 设置如下: * 事务传播设置是 PROPAGATION_REQUIRED * 事务隔离级别是 ISOLATION_DEFAULT * 事务是 读/写 * 事务超时默认是依赖于事务系统的,或者事务超时没有被支持 * 任何 RuntimeException 将触发事务回滚,但是任何 checked Exception 将不触发事务回滚 /@Transactional(readOnly=true)public class BusinessService { @Resource(name=“personDao”) private PersonDao personDao; @Transactional(readOnly=false,isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED) public void save() throws Exception{ personDao.save(); this.update(); } public void update() throws Exception{ personDao.save(); personDao.update(); }} 小记:三大框架中最难的当属三大框架的整合,本文只是简单的将Spring的一些常见配置记下,诸如SpringMVC也不错,和StrutsMVC只是封装的不一样.Spring强大的声明式事务管理,常被用以业务层的封装.
https://www.cnblogs.com/zhncnblogs/p/6645666.htmlSpring Transaction属性之Propagation配置文件如下: <tx:advice id=“txAdvice” transaction-manager=“transactionManager”>tx:attributes<tx:method name="save
" propagation=“REQUIRED” /><tx:method name=“saveOrUpdate*” propagation=“REQUIRES_NEW” /><tx:method name=“delete*” propagation=“REQUIRED” /><tx:method name=“update*” propagation=“REQUIRED” /><tx:method name=“upload*” propagation=“REQUIRED” /><tx:method name=“merge*” propagation=“REQUIRED” /><tx:method name=“refresh*” propagation=“REQUIRED” /><tx:method name=“Save" propagation=“REQUIRED” /><tx:method name="SaveOrUpdate” propagation=“REQUIRES_NEW” /><tx:method name=“Delete" propagation=“REQUIRED” /><tx:method name=“Update" propagation=“REQUIRED” /><tx:method name=“Merge" propagation=“REQUIRED” /><tx:method name="Refresh” propagation=“REQUIRED” /><tx:method name="” read-only=“true” propagation=“NOT_SUPPORTED” /></tx:attributes></tx:advice>aop:config<aop:pointcut id=“txManger” expression="execution ( com.sc.service….(…))” /><aop:advisor advice-ref=“txAdvice” pointcut-ref=“txManger” /></aop:config> propagation属性有以下几个值:MANDATORY:必须在有transaction状态下执行,如果当前没有transaction,则抛出异常IllegalTransactionStateException。NESTED:如果没有已定义的Transaction,当前方法新开一个Transaction并在该Transaction中运行。如果存在已定义的Transaction,当前方法在嵌套事务(Nested       Transaction)中运行 — 嵌套事务中可以定义储存点,因此可以独立于外部的Transaction而进行rollback。NEVER:在无transaction状态下执行;如果当前已有transaction,则抛出异常IllegalTransactionStateException。NOT_SUPPORTED:在无transaction状态下执行;如果当前已有transaction,则将当前transaction挂起。REQUIRED(默认值):在有transaction状态下执行;如当前没有transaction,则创建新的transaction。REQUIRES_NEW:创建新的transaction并执行;如果当前已有transaction,则将当前transaction挂起。SUPPORTS:如当前有transaction,则在transaction状态下执行;如果当前没有transaction,在无transaction状态下执行。
原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://www.iteye.com/blog/test-touch-1490833

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值