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配置事务方式) >>>>>>>>>>>>>>>>>>>& ...
随机推荐
- Codeforces 934.D A Determined Cleanup
D. A Determined Cleanup time limit per test 1 second memory limit per test 256 megabytes input stand ...
- angular.fromJson(json)的简单示例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- win7用户账户自动登录方法
为了计算机安全,相信使用Windows7系统的朋友大多都为自己的用户账户设置了或简单或复杂的密码,其实对于个人电脑来说,开机登录输入密码有时候会显得累赘,毕竟用户账户密码不仅仅是为了防止他人登录. 那 ...
- java爬虫--使用正则表达式获取网页中的email
package com.enation.newtest; import java.io.*; import java.util.regex.*; import java.net.*; public c ...
- .net yield return
yield在迭代器块中用于向枚举数对象提供值或发出迭代结束信号.它的形式为下列之一: yield return <expression>; yield break; 计算表达式并以枚举数对 ...
- sqlmap注入一般步骤
1. 找到注入点url2. sqlmap -u url -v 1--dbs 列出数据库或者 sqlmap -u url -v 1 --current-db 显示当前数据库3. sqlmap -u ur ...
- 戴文的Linux内核专题:02 源代码【转】
转自:https://linux.cn/article-2190-1.html?pr 在下载并解压内核源代码后,用户可以看到许多文件夹和文件.尝试去找一个特定的文件或许是一个挑战.谢天谢地,源代码以一 ...
- ipv6nginx错误
400 Bad Request The plain HTTP request was sent to HTTPS port错误参考官方文档解决方法如下: server {listen 80;liste ...
- Jekyll搭建个人博客
网上也有HEXO 搭建的博客,有人说使用 HEXO 在多台电脑上发布博客,操作起来并不是那么方便,所以使用Jekyll 来搭建. Jekyll配置 1,安装ruby环境 Windows系统使用Ruby ...
- TP5使用技巧
1.fetchSql用于直接返回SQL而不是执行查询,适用于任何的CURD操作方法. 例如:$result = Db::table('think_user')->fetchSql(true)-& ...