Spring管理事物两种方式
Spring管理事物两种方式
1. 编程式事物管理(在开发中不经常使用)
使用步骤
1. 配置数据库事物管理 DataSourceTransactionManager
<!--配置事物管理器-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
2. 配置数据库事物管理模板
<!--配置事物管理模板-->
<bean id="transactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate">
<!--配置事物管理-->
<property name="transactionManager" ref="transactionManager"></property>
</bean>
3. 在Service层中注入数据库事物管理模板
<!--配置Service-->
<bean id="accountService" class="top.wintp.springtx.demo1.service.AccountServiceImpl">
<!--配置事物的管理模板类-->
<property name="transactionTemplate" ref="transactionTemplate"/>
<property name="accountDao" ref="accountDao"/>
</bean>
4. 在需要执行事物的位置调用transactionTemplate的execute()方法
transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {
//执行你的逻辑
}
});
2. 声明式事物管理
声明式事务管理方式一:基于TransactionProxyFactoryBean的方式 (不常用)
使用步骤
1.配置事物管理 DataResourceTransactionManager
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
2.配置事物代理类
<!--配置事务代理类-->
<bean id="accountServiceProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!--配置事务管理器-->
<property name="transactionManager" ref="transactionManager"/>
<!--配置代理目标类-->
<property name="target" ref="accountService"></property>
<!--
配置事物的基本属性
必须配置
-->
<property name="transactionAttributes">
<props>
<!--
prop 格式
key:方法名 或者 方法 * 例如 insert*
值的格式:
PROPAGATION:事物的传播行为
ISOLATION:事物的隔离级别
readOnly:只读
-Exception:发生哪些异常,回滚事物 默认任何异常都回滚
+Exception:发生哪些异常,不回滚事物
-->
<prop key="transfMoney">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
3.引用代理类 使用代理目标类来接收
@Resource(name = "accountServiceProxy")
private AccountService mAccountService;
声明式事务管理方式二:基于AspectJ的XML方式
1.配置事物管理类
<!--配置事物的管理类-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
2.配置事物的增强
<!--配置事物的增强-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
###### 3.配置AOP – 切点和切面
<!--配置AOP-->
<aop:config>
<!--配置切入点-->
<aop:pointcut id="pointcut1"
expression="execution(* top.wintp.springtx.demo6.service.AccountService+.*(..))"/>
<!--配置切面-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>
</aop:config>
声明式事务管理方式三:基于注解的方式
1.配置事物管理器
<!--配置事物的管理类-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
2.开启事物注解
<!--开启事物注解
-->
<tx:annotation-driven transaction-manager="transactionManager"/>
3.在需要事物管理的类上添加注解
@Transactional(propagation = Propagation.REQUIRED)
Spring管理事物两种方式的更多相关文章
- 使用web.xml方式加载Spring时,获取Spring context的两种方式
使用web.xml方式加载Spring时,获取Spring context的两种方式: 1.servlet方式加载时: [web.xml] <servlet> <servlet-na ...
- Spring中事务管理的两种方式
spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager.对于编程式事务 ...
- Spring 注入的两种方式
Spring 的两种注入方式: 1. 属性注入:通过无参构造函数+setter方法注入 2. 构造注入:通过有参的构造函数注入. 优缺点: 1. 属性注入直白易懂,缺点是对于属性可选的时候,很多个构造 ...
- Spring事务管理的两种方式
参考文档: http://www.iteye.com/topic/1123347 http://blog.csdn.net/lcj8/article/details/2835432 PS:好像还是tx ...
- 使用aspectJ实现Spring AOP的两种方式
方式一:基于aspectJ的XML配置 方式二:基于aspectJ的注解方式 基于aspectJ的XML配置 1) 引入相关jar包 2) 创建Spring核心配置文件,必须导 ...
- Linux 服务管理的两种方式service和systemctl
service命令 service命令其实是去/etc/init.d目录下,去执行相关程序 ``` # service命令启动redis脚本 service redis start # 直接启动red ...
- Nginx集群session管理的两种方式
1.IP_HASH 修改nginx配置文件 实现非常简单,但是绑定在一个服务器上了,不能跨越多个服务. 2.redis管理 管理session信息的空间,需要修改tomcat配置文件 下载相应的red ...
- 数据库链接 mybatis spring data jpa 两种方式
jdbc mybatis spring data jpa dao service webservice jaxrs jaxws springmvc w ...
- Spring 依赖注入两种方式
(1):通过 setter 方法注入: <property name=“ ” ></property> 其中,name属性的取值依setter方法名而定,要求这个类里面这个对应 ...
随机推荐
- C# ACCESS 向含有自动编码字段表中添加记录提示“查询值的数目与目标字段中的数目不同”
引发错误的SQL语句如下: sqlStr = "insert into tb_ReportLog values('" + DevSite + "','" + D ...
- new和delete必须成对出现吗?【网上集合贴+个人总结】
new和delete必须成对出现吗?[网上集合贴+个人总结] 1.从内存泄露与否的角度考虑 new 和 delete不一定要成对出現.理论上是這樣的.但是从习惯上來說,new delete成對出現是一 ...
- SilverlightMVVM模式中的数据校验
silverlight的数据校验大体分成3种类型: 数据是非必填的但是需要满足相应数据格式的 数据是必填的且可能需要进行数据格式校验的 其他(如数据的联动校验) 以下的数据校验方式针对第二种: 在相应 ...
- Flume NG高可用集群搭建详解
.Flume NG简述 Flume NG是一个分布式,高可用,可靠的系统,它能将不同的海量数据收集,移动并存储到一个数据存储系统中.轻量,配置简单,适用于各种日志收集,并支持 Failover和负载均 ...
- 一道经典的js面试题
# 声明:学习编程语言最好的方式就是通过实例学习 ## 下面是我在博客上看到的一道js面试题,可以说非常经典,下面会以最简单的方式让你理解题目:```bashfunction Foo() { getN ...
- java垃圾回收机制整理
一.垃圾回收器和finalize() java垃圾回收器只负责回收无用对象占据的内存资源.但是如果你的对象不是通过 new 创建的(所有的new 对象都往堆中开辟资源,在一个地方,方便清理/管理资源) ...
- JS中的闭包 详细解析大全(面试避必考题)
JS中闭包的介绍 闭包的概念 闭包就是能够读取其他函数内部变量的函数. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变 ...
- spring boot 2.0 thymeleaf调试时正常,打包后运行报错. 找不到模板文件.
使用th:fragment 定义模板 使用 th:replace 来添加模板到需要的地方. 使用时发现一个非常奇怪的问题. 本机idea 调试环境一切正常, 但是打成jar包以后报错,提示找不到对 ...
- 深度优先(DFS)和广度优先(BFS)
深度优先(Depth-First-Search)和广度优先(Breadth-First-Search)是我们遍历图的两种方式,它们都属于穷举法,用来系统的遍历图中的所有顶点 关于如何再一个有向图/无向 ...
- Codeforces Gym101518H:No Smoking, Please(最小割)
题目链接 题意 给出一个n*m的酒店,每个点是一个房间,要将这个酒店的房间划分成为两块(一块无烟区,一块吸烟区),相邻的两个房间之间有一条带权边,权值代表空气锁的面积,如果把这条边给去掉,那么需要花费 ...