Spring 事务管理(四种方法)
来源:互联网 发布:蒙古剔肉小刀 淘宝 编辑:程序博客网 时间:2024/06/04 12:23
Spring将事务管理分成了两类:一、编程式事务管理
手动编写代码进行事务管理(很少使用)
二、声明式事务管理
1. 基于TransactionProxyFactoryBean的方式(很少使用)
——需要为每个进行事务管理的类,配置一个TransactionProxyFactoryBean进行增强
2. 基于AspectJ的xml方式(经常使用)
——一旦配置好,类上不需要添加任何东西
3. 基于注解(经常使用)
——配置简单,需要在业务层类上添加一个@Transactionl的注解
无论哪种方法,都需要配置TransactionManager事务管理器类(以JDBC数据源为例):
applicationContext.xml
<!-- C3P0数据源 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="driverClass" value="${jdbc.driverClass}" /><property name="jdbcUrl" value="${jdbc.url}"/><property name="user" value="${jdbc.username}"/><property name="password" value="${jdbc.password}" /></bean><!-- 配置事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean>
1. 编程式事务管理
applicationContext.xml
...<!-- 使用事务模板简化编程 --><bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"><property name="transactionManager" ref="transactionManager" /></bean>
Service.java
/*** 编程式的事务管理*/@Overridepublic void youMethod(..) {transactionTemplate.execute(new TransactionCallbackWithoutResult() {@Overrideprotected void doInTransactionWithoutResult(TransactionStatus status) {...//你的业务逻辑代码}});}
2.基于TransactionProxyFactoryBean的方式
applicationContext.xml
......<!-- 配置业务层的代理 --><bean id="accountServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"><property name="target" ref="accountService"/><property name="transactionManager" ref="transactionManager" /><property name="transactionAttributes"><props><!-- prop格式:* PROPAGATION:事务的传播行为* ISOLATION:事务的隔离级别* readOnly:只读(不可以进行修改,插入,删除的操作)* -Exception:发生哪些异常回滚事务* +Exception:发生哪些异常事务不回滚--><prop key="transfer">PROPAGATION_REQUIRED,-java.lang.ArithmeticException</prop></props></property></bean>
业务层无需多余代码(这也是声明式事务的好处,不会打乱代码逻辑)
3. 基于AspectJ的XML方式
applicationContext.xml
...<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!-- 具体配置在标签内属性中 --><!-- propagation:传播行为 isolation:隔离级别 read-only:只读 rollback-for:发生哪些异常时回滚 no-rollback-for:发生哪些异常时不回滚 timeout:过期信息 --><tx:method name="transfer" propagation="REQUIRED"/></tx:attributes></tx:advice><aop:config><aop:pointcut expression="execution(* org.spring.transaction.AccountService+.*(..))" id="pointcut"/><aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/></aop:config>
4.基于注解
applicationContext.xml
...<tx:annotation-driven transaction-manager="transactionManager"/>
Service.java
/* * @Transactional 注解中的属性 * propagation:传播行为 * isolation:隔离级别 * read-only:只读 * rollback-for:发生哪些异常时回滚 * no-rollback-for:发生哪些异常时不回滚 * timeout:过期信息 */@Transactional(propagation=Propagation.REQUIRED)public class YourService(){ ...}
0 0
- Spring 事务管理(四种方法)
- JAVAWEB开发之Spring详解之——Spring事务管理详解(四种事务管理方式)
- Spring学习四(Spring事务管理)
- Spring ActiveMQ 整合(四): JMS 事务管理
- spring activeMQ 整合(四): JMS 事务管理
- spring 事务管理 四
- spring中的事务管理(四)
- Spring的事务管理的几种方法
- Spring配置事务管理方法
- Spring整合JMS(四)-事务管理
- Spring的四种事务管理(一种编程式事务+三种声明事务)<学习随笔>
- Spring的四种事务管理(一种编程式事务+三种声明事务)<学习随笔>
- Spring事务管理的四种方式(以银行转账为例)
- Spring事务管理的四种方式(以银行转账为例)
- Spring事务管理的四种方式(以银行转账为例)
- Spring整合JMS(四)——事务管理
- Spring整合JMS(四)——事务管理
- Spring整合JMS(四)——事务管理
- jquery图片查看插件,支持旋转、放大、缩小、拖拽、缩略图(仿qq图片查看)
- C# 设计模式巩固笔记
- Fragment被replace后视图被摧毁
- git与github简单用法
- 前缀和 CodeForces
- Spring 事务管理(四种方法)
- ubuntu如何删除xubuntu-destop并恢复原始界面
- codecademy SQL lesson1
- java.util.ConcurrentModificationException
- 二分三分u1597
- KVM 设备虚拟文件接口
- Source Insight添加快键键注释
- 只有努力才会有收获
- 读取文件包含重要字段进行判断