详细解析Spring事务的配置和OpenSessionInview的作用
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)
hibernate中为了性能,一般采用代理加载,所以实现多表连接,外键表字段会因为session的关闭无法查询到,
这时候就需要在web.xml中配置opensessioninview -- 在页面中打开session
<filter>
<filter-name>OpenSessionInView</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>OpenSessionInView</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
此时如果在页面上对数据进行写入操作(增加,删除,修改等),会出现read-only错误.这个错误可以配置事务解决
http://blog.csdn.net/jacxuan/article/details/53454819
详细解析Spring事务的配置和OpenSessionInview的作用的更多相关文章
- Spring事务Transaction配置的五种注入方式详解
Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...
- spring事务的配置
前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...
- Spring事务的配置、参数详情及其原理介绍(Transactional)
Spring 事务管理分为编程式和声明式的两种方式.编程式事务指的是通过编码方式实现事务:声明式事务基于 AOP,将具体业务逻辑与事务处理解耦.声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中 ...
- Spring事务管理配置以及异常处理
Spring事务管理配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- spring 事务管理配置
本篇文章只涉及spring事务的配置,不进行事务的介绍. spring通过PlatformTransactionManager接口作为事务管理器来进行事务的管理,它本身并不进行事务的创建以及相关操作, ...
- Spring事务管理配置示例
(一).Spring事务特性 1.事务隔离级别 隔离级别是指若干个并发的事务之间的隔离程度. ISOLATION_DEFAULT:默认值,使用数据库的默认隔离级别,就是ISOLATION_READ_C ...
- spring 事务的配置学习
1.spring事务管理器接口PlatformTransactionManager 接口中的方法 获取事务状态信息 -TransactionStatus getTransaction(Transact ...
- Spring 事务XML配置
<!-- 配置 Spring 的声明式事务 --> <!-- 1. 配置事务管理器 --> <bean id="transactionManager" ...
- spring5 源码深度解析----- Spring事务 是怎么通过AOP实现的?(100%理解Spring事务)
此篇文章需要有SpringAOP基础,知道AOP底层原理可以更好的理解Spring的事务处理. 自定义标签 对于Spring中事务功能的代码分析,我们首先从配置文件开始人手,在配置文件中有这样一个配置 ...
随机推荐
- web项目报outmemory错误解决方案
因为数据问题内存不够出现错误,将参数加入到eclipse的run的配置文件中:
- yum升级kernel
# uname -a Linux host -.el6.x86_64 # SMP Fri May :: BST x86_64 x86_64 x86_64 GNU/Linux # cat /etc/re ...
- Change hostname and IP on Soalris10
To see the existing configuration: # ifconfig -a Update the following files for IP Address: /etc/hos ...
- Java基础复习--java.util.Timer定时任务
在java中,Timer类主要用于定时性.周期性任务 的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下. (1)sche ...
- WKWebview 和 WebViewJavascriptBridge
WKWebview 和 WebViewJavascriptBridge https://www.cnblogs.com/L-vincen/p/6681435.html 链接在这里,有很多不错的文章,大 ...
- CodeForces 659D Bicycle Race (判断点是否为危险点)
D - Bicycle Race Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u S ...
- 手动破解的 Linux下的Maltab 2014b
人人网上一个很不错的东东,转发全文如下: 好久没有写日志了,今天更新一篇. 承蒙 @刘慎修(263525031 )修哥分享的各种激励,发布一发我自创的黑科技. Maltab 2014b 发布了,但是只 ...
- UVA 10910 Marks Distribution
题意 把数字T分成N个数的和,保证这N个数中最小的数大于P.求方案数目 另f[i][j]表示把i分成j个数的和的方案数 f[i][j]=f[i][j-1]+f[i-1][j-1]+f[i-2][j-1 ...
- MyBatis报错 Parameter '0' not found. Available parameters are [arg1, arg0, param1, param2]
修改 <update id="updateStatusById" parameterType="java.lang.Integer"> update ...
- 解决iOS10的Safari下Meta设置user-scalable=no无效的方法
苹果为了提高Safari中网站的辅助功能,屏蔽了Meta下的user-scalable=no功能.所以在iOS10下面,就算加上user-scalable=no,Safari浏览器也能支持手动缩放. ...