Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Spring应用——事务管理

事务基础:请参看:http://www.linuxidc.com/Linux/2016-08/133806.htm一、Spring 事务管理1.前提:事务管理器在使用 Spring 声明式事务管理策略之前,必须配置事务管理器。Spring 的核心事务管理器的顶级接口是 PlatformTransactionManager。DataSourceTransactionManager:在应用程序中只需要处理一个数据源,而且通过 JDBC 进行存取。HibernateTransactionManager:用 Hibernate 框架存取数据。事务管理器以普通 Bean 的形式生命在 Spring IOC 容器中。如:<context:property-placeholder location="db.properties"/><bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource"> <property name="user" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/> <property name="driverClass" value="${jdbc.DriverClass}"/></bean><bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager"> <property name="dataSource" ref="dataSource"/></bean>2.XML声明式事务管理:Spring 通过 SpringAOP 框架支持声明式事务。(1)事务管理是一个横切关注点。(2)具体操作:<1>在 <beans> 根元素中添加  tx Schema 的约束。可以通过 tx  Schema 中定义的 <tx:advice> 元素声明事务增强。<tx:advice transaction-manager="transactionManager" id="txAdvice"/><2>将增强配置到相应的 Spring AOP 切面。<aop:config> <aop:pointcut id="bookPointcut" expression="execution(* *.BookServiceImpl.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="bookPointcut"/></aop:config>需要注意的是:只有公有的方法才可以添加增强。3.注解声明式的管理事务:Spring 通过 @Transacational 注解声明式地管理事务(1)Spring 允许使用 @Transacational 注解来标注事务方法。只能标注公有方法。(2)可以在方法或类级别添加 @Transactional 注解。当添加到类上时,这个类的所有公有方法都会被定义成支持事务处理的。(3)Spring Config 文件中的配置:<1>只需要添加 <tx:annotation-driven/> 节点,并为其指定事务管理器就好了。<2>指定事务管理器:若事务管理器名称是 transacationManager,就可以在 <tx:annotation-driven/> 节点中省略 transaction-manager 属性。该元素会自动检测该名称的事务管理器。<context:property-placeholder location="db.properties"/><bean class="com.mchange.v2.c3p0.ComboPooledDataSource" id="dataSource"> <property name="user" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/> <property name="driverClass" value="${jdbc.DriverClass}"/></bean><bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager"> <property name="dataSource" ref="dataSource"/></bean><tx:annotation-driven/>二、Spring 事务传播行为1.JDBC 提供了事务隔离级别这种解决方案,Spring 对其进行了补充和扩展,就是 事务的传播行为。2.Spring 提供了七种事务传播行为:PROPAGATION_REQUIRED、PROPAGATION_REQUIRED_NEW、PROPAGATION_NESTED、PROPAGATION_SUPPORTS、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER、PROPAGATION_MANDATORY我自己理解的 PROPAGATION_REQUIRED 和 PROPAGATION_REQUIRED_NEW :方法 A 调用方法 B:(1)如果 A 是一个事务方法,B 也是一个事务方法,那么 B 应该使用自己的事务还是 A 的事务?如果使用 A 的事务 —— PROPAGATION_REQUIRED如果使用 B 自己的事务 —— PROPAGATION_REQUIRED_NEW 举个例子来说明:一个事务:A、B两位同学去饭馆吃饭中午放学后,A 同学去饭馆吃饭,恰巧刚刚认识的 B 同学也在饭馆吃饭,A 同学是该自己吃呢?还是和 B 同学一起吃呢?如果是和 B 一起 —— PROPAGATION_REQUIRED如果是 A 自己吃 —— PROPAGATION_REQUIRED_NEW(2)如果 A 是一个事务方法,B 不是一个事务方法,那么 B 会使用 A 的事务。提示:PROPAGATION 意思是 传播*上面是我自己的理解,没有将所有的情况覆盖,可能自己理解的也有偏差,看到此处的时候请小心求证。(3)Spring 默认的事务传播行为为 PROPAGATION_REQUIRED三、Spring 事务其他功能除了强大的事务传播行为外,Spring 还提供了一些小的附加功能1.事务超时——为了解决事务时间太长,消耗资源太多的问题,给事务设置一个最大时长,如果超时,则回滚事务。以 秒为单位。2.只读事务——表示这个事务只读取数据而不更新数据3.设置事务的回滚属性默认情况下只检查运行时异常,会导致事务回滚。可以通过 rollbackFor 属性来定义,如果不止一???,可以通过 "," 进行分割。不论是事务的传播行为还是事务的超时和只读属性,Spring 在 @Transactional 注解中提供了对应的属性。也可以通过 XML 的方式去配置,如<tx:advice transaction-manager="transactionManager" id="bookAdvice"> <tx:attributes> <tx:method name="shop" propagation="REQUIRED"/> </tx:attributes></tx:advice>Spring中如何配置Hibernate事务 http://www.linuxidc.com/Linux/2013-12/93681.htmStruts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm基于 Spring 设计并实现 RESTful Web Services http://www.linuxidc.com/Linux/2013-10/91974.htmSpring-3.2.4 + Quartz-2.2.0集成实例 http://www.linuxidc.com/Linux/2013-10/91524.htm使用 Spring 进行单元测试 http://www.linuxidc.com/Linux/2013-09/89913.htm运用Spring注解实现Netty服务器端UDP应用程序 http://www.linuxidc.com/Linux/2013-09/89780.htmSpring 3.x 企业应用开发实战 PDF完整高清扫描版+源代码 http://www.linuxidc.com/Linux/2013-10/91357.htmSpring 的详细介绍:请点这里
Spring 的下载地址:请点这里本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-08/133807.htm