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的作用的更多相关文章

  1. Spring事务Transaction配置的五种注入方式详解

    Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...

  2. spring事务的配置

    前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...

  3. Spring事务的配置、参数详情及其原理介绍(Transactional)

    Spring 事务管理分为编程式和声明式的两种方式.编程式事务指的是通过编码方式实现事务:声明式事务基于 AOP,将具体业务逻辑与事务处理解耦.声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中 ...

  4. Spring事务管理配置以及异常处理

    Spring事务管理配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  5. spring 事务管理配置

    本篇文章只涉及spring事务的配置,不进行事务的介绍. spring通过PlatformTransactionManager接口作为事务管理器来进行事务的管理,它本身并不进行事务的创建以及相关操作, ...

  6. Spring事务管理配置示例

    (一).Spring事务特性 1.事务隔离级别 隔离级别是指若干个并发的事务之间的隔离程度. ISOLATION_DEFAULT:默认值,使用数据库的默认隔离级别,就是ISOLATION_READ_C ...

  7. spring 事务的配置学习

    1.spring事务管理器接口PlatformTransactionManager 接口中的方法 获取事务状态信息 -TransactionStatus getTransaction(Transact ...

  8. Spring 事务XML配置

    <!-- 配置 Spring 的声明式事务 --> <!-- 1. 配置事务管理器 --> <bean id="transactionManager" ...

  9. spring5 源码深度解析----- Spring事务 是怎么通过AOP实现的?(100%理解Spring事务)

    此篇文章需要有SpringAOP基础,知道AOP底层原理可以更好的理解Spring的事务处理. 自定义标签 对于Spring中事务功能的代码分析,我们首先从配置文件开始人手,在配置文件中有这样一个配置 ...

随机推荐

  1. artTemplate 动态加载模版

    问题 之前项目中一直有用到artDialog对话框组件,作者后期又发布了js模版引擎,使用过几次,效果感觉还挺好.当自己想把模版放在html之外时,遇到了一点问题. 作者介绍的方式,是在js文件中,通 ...

  2. Objective-C类族和工厂模式

    http://www.cocoachina.com/ios/20141124/10296.html 相信大家都了解GoF的<Design Patterns>中提到的23种设计模式,其中将常 ...

  3. MyRecycleView带有上拉加载更多

    package com.gan.myrecycleview; import android.content.Context; import android.support.v4.widget.Swip ...

  4. JS打印——第三方控件打印

    LODOP 官方地址:http://www.lodop.net/ 一个很好的打印控件,可以是实现纸张设置.横打竖打.打印预览.打印维护多种功能.官网的示例非常详细.能很好支持多种浏览器的打印. 在使用 ...

  5. ubuntu默认用户分析

    harvey@ubuntu:/etc$ cat -b passwd root:x:::root:/root:/bin/bash daemon:x:::daemon:/usr/sbin:/bin/sh ...

  6. linux的文件权限分析

    windows中,文件的类型是根据后缀名来确定的,但是linux则是根据标志来确定的,查看一个文件的权限的命令是 ls -l #查看文件的权限 文件的权限结构如图: ①第一部分:10个字符(第1位表示 ...

  7. 【linux高级程序设计】(第十五章)UDP网络编程应用 4

    socket信号驱动 为了使一个套接字能够使用信号驱动I/O,至少需要以下3步操作. 1.安装SIGIO信号 2.套接字的拥有者设定为当前进程.因为SIGIO信号只会送到socket拥有者进程. 通过 ...

  8. Web开发之编码与解码、签名、加密与解密

    在Web开发中,编码与解码.签名.加密与解密是非常常见的问题.本文不会介绍具体实例,而是介绍这些的原理.用途与区别.一.编码与解码        在Web开发中,需要通过URL的query参数来传递数 ...

  9. A/B Testing with Practice in Python (Part One)

    I learned A/B testing from a Youtube vedio. The link is https://www.youtube.com/watch?v=Bu7OqjYk0jM. ...

  10. [Python Cookbook] Pandas: 3 Ways to define a DataFrame

    Using Series (Row-Wise) import pandas as pd purchase_1 = pd.Series({'Name': 'Chris', 'Item Purchased ...