Spring声明式事务的配置方式
1.事务的特性
原子性:事务中的操作是不可分割的一部分
一致性:要么同时成功,要么同时失败(事务执行前后数据保持一致)
隔离性:并发互不干扰
持久性:事务一旦被提交,它就是一条持久性的数据
2.Spring事务管理高层抽象3个接口
PlatformTransactionManager--平台事务管理器
-Spring为不同的持久化框架提供了不同的平台事务管理器接口实现
TransactionDefinition--事务定义信息(隔离,传播,超时,只读)
1>事务的隔离级别
default--适用后端数据库默认的隔离级别
READ_UNCOMMITED - READ_COMMITTED - REPEATABLE_READ - SERIALIZABLE(脏,幻(虚),不可重复读)
2>事务的传播行为:解决业务层方法之间相互调用的问题
PROPAGATION_REQUIRED - 支持当前事务,如果不存在就新建一个
PROPAGATION_REQUIRES_NEW - 如果有事务存在,挂起当前事务,创建一个新的事物
PROPAGATION_NESTED - 如果当前事务存在,则嵌套执行
TransactionStatus--事务具体运行状态
1>------------------------------------------------------
流程 --
根据事务定义的信息有平台事务管理器进行事务管理,进行管理产生相应的状态
3.Spring事务管理
- 编程式的事务管理 -- 通过TransactionTemplate(事务模板)
- 使用xml配置声明式事务
--基于transactionProxyFactoryBean的事务管理
---配置事务管理器
---配置业务层代理
---配置目标对象
---注入事务管理器
---注入事务
<!--
prop格式 PROPAGATION--事务的传播行为 ISOLATION--事务的隔离级别 READONLY--只读
-EXCEPTION--发生哪些行为事务回滚 +EXCEPTION--发生哪些错误事务不回滚
-->
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置业务层代理 -->
<bean id="accountServiceProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!-- 配置目标对象 -->
<property name="target" ref="accountService"></property>
<!-- 注入事务管理器 -->
<property name="transactionManager" ref="transactionManager"></property>
<!-- 注入事务属性 -->
<property name="transactionAttribute">
<props>
<prop key="tran*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
--基于AspectJ的事务声明(重点)
---配置事务的增强
----事务定义信息
-----propagation:事务的传播行为
-----isolation:事务的隔离级别
-----read-only:只读
-----rollback-for:发生哪些异常时回滚
-----no-rollback-for:发生哪些异常时不回滚
-----timeout:过期信息
---配置切面
----配置切入点
----配置切面
<!-- 配置事务的通知(事务的增强) -->
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<!-- 事务定义信息 -->
<tx:attributes>
<tx:method name="tran*" propagation="REQUIRED" read-only="false" />
</tx:attributes>
</tx:advice>
<!-- 配置切面 -->
<aop:config>
<!-- 配置切入点 -->
<aop:pointcut expression="execution(* com.spring.service.impl.*.*(..))"
id="pointcut" />
<!-- 配置切面 -->
<aop:advisor advice-ref="transactionAdvice" pointcut-ref="pointcut" />
</aop:config>
--基于注解的方式进行事务的声明(重点)
---开启事务注解
<tx:annotation-driven transaction-manager="transactionManager"/>
---在要进行实务操作的类名上进行注解
@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT)
源码 --
Spring声明式事务的配置方式的更多相关文章
- Spring声明式事务的配置~~~
/*2011年8月28日 10:03:30 by Rush */ 环境配置 项目使用SSH架构,现在要添加Spring事务管理功能,针对当前环境,只需要添加Spring 2.0 AOP类库即可.添加 ...
- Spring声明式事务的实现方式选择(JDK动态代理与cglib)
1.简介 Spring声明式事务的具体实现方式是动态决定的,与具体配置.以及事务代理对象是否实现接口等有关. 2.使用JDK动态代理的情况 在满足下面两个条件时,Spring会选择JDK动态代理作为声 ...
- 五(一)、spring 声明式事务注解配置
一.事务概述: 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用:比如 用户购买图书:购买动作之前需要确认 ①图书的数量是否足够:②用户账号余额是否足够 ...
- spring声明式事务以及配置
使用spring提供的事务处理机制的好处是程序员可以不用关心事务的切面了,只要配置就好了,可以少写代码. spring声明式事务处理 spring 声明:针对的是程序员,程序员告诉spring容器,哪 ...
- 五(二)、spring 声明式事务xml配置
概述: 接着上一节内容,把注解配置@@Transactional形式改为xml配置形式: 一.配置步骤 1.配置事务管理器 1 <!-- 1配置事务管理器 --> 2 <bean i ...
- XML方式实现Spring声明式事务管理
1.首先编写一个实体类 public class Dept { private int deptId; private String deptName; public int getDeptId() ...
- JavaEE学习之Spring声明式事务
一.引言 上一篇文章,学习了AOP相关知识,并做了一个简单的Hello world.本文在上篇文章的基础上,进一步学习下Spring的声明式事务. 二.相关概念 1. 事务(Transaction)— ...
- spring 声明式事务管理
简单理解事务: 比如你去ATM机取5000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉5000元钱:然后ATM出5000元钱.这两个步骤必须是要么都执行要么都不执行.如果银行卡扣除了5000块但 ...
- Spring声明式事务(xml配置事务方式)
Spring声明式事务(xml配置事务方式) >>>>>>>>>>>>>>>>>>>& ...
随机推荐
- python的pip安装
http://blog.csdn.net/liuchunming033/article/details/39578019
- WIN8下笔记本共享热点的设置
C:\windows\system32>netsh wlan start hostednetwork 无法启动承载网络. 组或资源的状态不是执行请求操作的正确状态. 解决方法: http://j ...
- 使用vim进行java编程
首先:编写源代码Test.java 1class Test{ ...
- studio构建错误Element uses-permission#android.permission.ACCESS_NETWORK_STATE at AndroidManifest.xml:38:5-79 dupli
今天在项目构建的时候遇到了如下报错: Element uses-permission#android.permission.ACCESS_NETWORK_STATE at AndroidManifes ...
- kubernetes节点安装配置
#环境安装,要与控制节点一致Centos 7 Linux release 7.3.1611网络: 互通配置主机名设置各个服务器的主机名hosts#查找kubernetes支持的docker版本Kube ...
- mybatis的模糊查询格式
mybatis的模糊查询格式: <select id="xxx" parameterType="com.model.xxx" resultMap=&quo ...
- 关于java1.7集合源码阅读
工作中每天都会和java集合打交道,虽然以前也看过jdk源码的实现,但有些东西时间长了还是会遗忘,或者有些实现在新版本中有了新的变化,俗话说"温故而知新",所以打算再阅读一下相关源 ...
- VS2005重置所有设置
1. 关闭VS 2. 在命令行运行microsoft visual studio 8\common7\ide\devenv.exe /setup /resetuserdata /resetsettin ...
- css3帮你轻松实现圆角效果,不一样的前端页面。
在Web前端页面实现圆角效果,CSS3帮你轻松实现,一个人人皆知的属性 圆角边框的绘制是Web页面和Web应用程序中经常用来美化页面效果的手法之一.今天,小编为大家介绍CSS3提供的可以将矩形变为圆角 ...
- JQuery里面的知识
JQuery是一个javaScript库 JQuery极大的简化了javaScript编程 通过点击 "TIY" 按钮来看看它是如何运行的. 演示JQuery的hide函数,隐藏了 ...