为了账号安全,请及时绑定邮箱和手机立即绑定
  • 2312
    查看全部
  • 开启注解事务
    查看全部
  • 还不错
    查看全部
  • 好的
    查看全部
  • Spring事务管理的课程目标:

    我们会学习到如下内容:

    1.事务的回顾,在事务的回顾里边,我们会回顾一下事务的基本的概念以及事务的一些相关的特性,

    2.那么接下来我们会学习spring事务管理中的一组API,因为我们可以通过这组API来进行spring的事务管理

    3.那么接下来我们就来学习spring中的编程式的事务管理,以及spring中的声明式的事务管理。

    那么这就是我们这节课的一个目标。

    那么我们在说完了这节课的课程目标之后呢我们接下来来说一下,我们的第一个内容,就是事务的知识点的回顾。

    什么是事务?以及事务的特性?

    事务指的是逻辑上的一组操作,这组操作呢,要么全部成功,要么全部 失败。那么我们在这里以一个银行转账的案例来分析,

    那么我们假设有两个人,一个是张三,一个是李四,那么张三账户里有2千元,李四账户也有2千元,那现在张三要给李四进行转账1千元的操作,那么我们就会修改张三的账户,给张三的账户扣除掉1千元,然后我们要修改李四的账户,给李四的账户加1千元,那这样的话,我们就完成了一个转账的操作。但这组操作呢,它不应该出现的情况就是张三转了1千元之后,比如说突然间断电了,或者出现了一些其他的特殊情况,那么这样的话,张三的钱转出去了,而李四没收到,那这种情况是不应该出现的,所以说在这种情况里边,我们的一组操作我们可以用一组事务来进行管理,那么这组操作一旦加入到了事务的管理操作里边了,那么它们就必须一起成功,或者一起失败,那么一起 成功的情况是什么呢 就是张三把钱转出去了,李四也收到钱了,那如果是一起失败呢,那一起失败指的是张三的钱也没转出去,李四也没收到钱,这种情况不允许出现张三钱转了,李四没收到的情况。所以说这是事物的概念。它就是用来保证我们这组操作要么全都成功,要么全都失败,那么在事务当中呢,它是有一些相关的特性的,那事务一般都会有4大特性:这4大特性包含了原子性,一致性,隔离性,以及持久性,那什么是原子性呢,原子性指的是事务是一个不可分割的单位,事务中的操作要么都发生了,要么都不发生,那么我们都知道,物理中原子是最小的单位 ,那么它强调的是我们这一组单位是不能进行分割的,不能拿出来单独去运行的,因为单独运行的话,那都有可能会导致错误或者而失败的产生,那么我们要把这一组呢要放在一个事务里边,那么它们就能一起成功或者一起失败了。那什么是事务的一致性呢?那事务的一致性指的是,我们事务执行的前后,数据的完整性,要保持一致,也就是说我们在事务执行之前,张三里边有2千元,李四账户里也有2千元,那么总共是4千元,那当我们转账完成之后,那张三的账户里是1千元,而李四的账户里是3千元,那总共的金额也是4千元,所以说在执行的前后,我们的这种完整性,是一致的。它不能出现张三的钱被扣掉,李四没收到这种情况。那什么是隔离性呢?隔离性强调的是,多个用户并发访问数据库的时候,那么一个用户的事务的执行过程当中,不应该受到其他事务的干扰,比如说我们有两个事务在同时的操作数据库,那你这边比如说正在修改张三的记录,而又有一个记录进来修改张三这条记录,那最后修改完事之后呢,会导致你这个记录会被重复的修改,或者是一开始的事务改完的记录被第二个事务给覆盖掉了。那么我们的事务在执行的过程当中呢,尽量不要让它收到其他事务的干扰,那这怎么做到呢?那数据库里都有一个事务的隔离级别,我们可以通过设置隔离级别呢,来解决这种问题。还有一个就是事务的持久性,事物的持久性它指的是一个事务一旦被提交了,那它的记录就被真正的修改到我们的数据库里边了。如果你的事务没有提交,那你在执行了一个语句之后呢,这个数据还没有被真正的修改到数据库,或者是进入到数据库,那么只有你的事务提交了之后,这条记录才会被真正的修改或者进入到我们的数据库当中,那这个就是事务的持久性。通过以上的讲解,可以对事务有一个简单的认识。



    查看全部
    1 采集 收起 来源:事务回顾

    2019-09-08

  • PlatformTransactionManager接口介绍:

    通过Spring的API可以知道该接口有许多实现类例如:DataSourceTransactionManager、HibernateTransactionManager等。Spring会为不同的持久化框架提供了不同PlatformTransactionManager接口实现。

    https://img1.sycdn.imooc.com//5d4c247900011d9d11210267.jpg

    比如当我们使用SpringJDBC或者iBatis进行持久化数据时使用DataSourceTransactionManager。

    https://img1.sycdn.imooc.com//5d4c251e0001e25a10700304.jpg

    通常我们使用的是DataSourceTransactionManager和HibernateTransactionManager。


    查看全部
  • 事务隔离级别(四种)

    mysql默认采用REPEATABLE_READ隔离级别;

    oracle默认采用READ_COMMITTED隔离级别

    查看全部
  • spring开发基础包

    查看全部
  • 事务的特性: 

    原子性 -> 指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

     一致性 -> 指事务前后的数据的完整性必须保持一致。 

    隔离性 -> 指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要互相隔离。

     持久性 -> 指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响。

    查看全部
    1 采集 收起 来源:事务回顾

    2018-11-30

  • spring事务管理主要有三个接口

    platformTransactionManager

    平台事务管理器:事务的提交,事务的回滚等

    TransactionDefinition

    事务定义信息 隔离,传播,超时,只读。

    TransactionStatus 事务具体的运行状态

    查看全部
    1 采集 收起 来源:接口介绍

    2018-10-23

  • 课程总结:介绍了四种Spring做事务控制的方法

    1.  手动编写代码做事务管理(很少使用)

    2. 为每个进行事务管理的类,配置一个TransactionProxyFactoryBean进行增强(很少使用)

    3.  基于AspectJ的XML方式(经常使用), 一旦配置好之后,类上不需要添加任何东西

    12345678910111213141516171819202122232425262728<!-- 配置事务管理器 --><bean id="transactionManager"    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource"></property></bean><!-- 配置事务的通知(事务的增强) --><tx:advice id="txAdvice" transaction-manager="transactionManager">    <tx:attributes>    <!--     propagation 事务传播行为    isolation : 事务的隔离级别    read-only 只读    rollback-for 发生哪些异常回滚    no-rollback-for 发生哪些异常不回滚    timeout 过期信息    -->    <tx:method name="transfer" propagation="REQUIRED" isolation="DEFAULT"         read-only="false" rollback-for="" timeout="" no-rollback-for=""/>    </tx:attributes></tx:advice><!-- 配置切面 --><aop:config>    <!-- 配置切入点 -->    <aop:pointcut expression="execution(* cn.muke.spring.demo3.AccountService+.*(..))"         id="pointcut1"/>    <!-- 配置切面 -->    <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/></aop:config>

        4. 基于注解的方式(经常使用)

        配置文件中开启注解驱动

    1234567<!-- 配置事务管理器 --><bean id="transactionManager"         class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    <property name="dataSource" ref="dataSource"></property></bean><!-- 开启注解事务 --><tx:annotation-driven transaction-manager="transactionManager"/>

    代码中直接使用@Transactional注解

    12345678910/** * @Transactional 注解中的属性 * propagation 事务的传播行为 * isolation 事务的隔离级别  */@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,readOnly=false)public class AccountServiceImpl implements AccountService{    //其他省略}


    查看全部
    1 采集 收起 来源:课程总结

    2018-07-02

  • 课程总结:介绍了四种Spring做事务控制的方法

    1.  手动编写代码做事务管理(很少使用)

    2. 为每个进行事务管理的类,配置一个TransactionProxyFactoryBean进行增强(很少使用)

    3.  基于AspectJ的XML方式(经常使用), 一旦配置好之后,类上不需要添加任何东西

    <!-- 配置事务管理器 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- 配置事务的通知(事务的增强) -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
        <!-- 
        propagation 事务传播行为
        isolation : 事务的隔离级别
        read-only 只读
        rollback-for 发生哪些异常回滚
        no-rollback-for 发生哪些异常不回滚
        timeout 过期信息
        -->
        <tx:method name="transfer" propagation="REQUIRED" isolation="DEFAULT" 
            read-only="false" rollback-for="" timeout="" no-rollback-for=""/>
        </tx:attributes>
    </tx:advice>
    <!-- 配置切面 -->
    <aop:config>
        <!-- 配置切入点 -->
        <aop:pointcut expression="execution(* cn.muke.spring.demo3.AccountService+.*(..))" 
            id="pointcut1"/>
        <!-- 配置切面 -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/>
    </aop:config>

        4. 基于注解的方式(经常使用)

        配置文件中开启注解驱动

    <!-- 配置事务管理器 -->
    <bean id="transactionManager" 
            class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- 开启注解事务 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

    代码中直接使用@Transactional注解

    /**
     * @Transactional 注解中的属性
     * propagation 事务的传播行为
     * isolation 事务的隔离级别
     * 
     */
    @Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,readOnly=false)
    public class AccountServiceImpl implements AccountService{
        //其他省略
    }


    查看全部
    1 采集 收起 来源:课程总结

    2018-04-27

  • 如果不考虑隔离性,会引发如下的安全问题: 1.脏读。 一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。 2.不可重复读。 在同一个事务中,多次读取同一数据返回的结果有所不同。 3.幻读。 一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。
    查看全部
  • propagation_required:a存在事务,则b与a同一事务,如果a没有事务,则b新起事务 propagation_supported:a存在事务,则b与a同事务,如果a没有事务,则b也没有事务 propagation_mondatary:a存在事务,则b与a同事务,如果a没有事务,则抛异常 propagation_required_new:如果a存在事务,b新起事务 propagation_not_supported:如果a存在事务,b不已事务运行 propagation_never:如果出现事务,直接抛出异常 propagation_nested:a事务运行结束后,会有保存点,这边可以自定事务,b出错,a可以回滚或者就到a的保存点
    查看全部
  • 事物管理 1.编程式的事物管理 在实际应用中很少使用 通过TransactionTemplate手动管理事务 2.使用xml配置声明式事务 开发中推荐使用(代码侵入性最小) spring的声明式事务是通过aop实现的
    查看全部

举报

0/150
提交
取消
课程须知
学习本课程前需要熟悉Spring的基础知识,掌握IOC和AOP的基本概念。小伙伴们可参考《Spring入门》课程
老师告诉你能学到什么?
1、理解Spring事务管理的基本概念 2、掌握Spring事务管理的应用场景 3、掌握声明式事务管理和编程式事务管理的实现方式

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!