为了账号安全,请及时绑定邮箱和手机立即绑定
  • 编程式事务
    查看全部
  • 事务传播行为(七中)
    查看全部
  • 事务管理接口
    查看全部
    0 采集 收起 来源:接口介绍

    2017-02-18

  • /** * @Transactionl注解中的属性(不写就全部使用默认值) * propagation : 事务传播行为 * isolation : 事务的隔离级别 */ @Transactional public class AccountServiceImpl implements AccountService { //注入转账的DAO类,使service能够调用DAO的方法 private AccountDao accountDao; public void setAccountDao(AccountDao accountDao) { this.accountDao = accountDao; } @Override public void transfer(String out, String in, Double money) { accountDao.outMoney(out, money); int i = 1/ 0 ; accountDao.inMoney(in, money); } } <!--配置事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 开启注解事务 --> <tx:annotation-driven transaction-manager="transactionManager"/>
    查看全部
  • 声明式事务管理方式二:基于AspectJ的XML方式 applicationContext.xml配置 <!-- 配置事务的通知(事务的增强) --> <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" /> </tx:attributes> </tx:advice> <!-- 配置aop切面 --> <aop:config> <!-- 配置切入点 --> <aop:pointcut expression="execution(* com.imooc.spring.demo3.AccountService+.*(..))" id="pointcut1"/> <!-- 配置切面 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/> </aop:config>
    查看全部
  • 声明式事务管理方式一:基于TransactionProxyFactoryBean的方式
    查看全部
  • applicationContext.xml配置 <!-- 配置业务层代理 --> <bean id="accountServiceProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <!-- 配置目标对象 --> <property name="target" ref="accountService"></property> <!-- 注入事务管理器 --> <property name="transactionManager" ref="transactionManager"></property> <!-- 注入事务属性 --> <property name="transactionAttributes" > <props> <!-- prop格式: * PROPAGATION :事务的传播行为 * ISOLATION :事务的隔离级别 * readOnly :只读(不可以进行修改,插入,删除的操作) * -Exception :发生哪些异常回滚事务 * +Exception :发生哪些异常事务不回滚 --> <prop key="*">PROPAGATION_REQUIRED,+java.lang.ArithmeticException</prop> </props> </property>
    查看全部
  • 脏读,A进行update、insert时候,B读取了中间状态不知道对不对的值; 不可重复读,B在A 的update操作前后,读到的数据不一致; 幻读,B在A的insert操作前后,读到了的数据不一致
    查看全部
  • 事务的隔离级别: mysql默认为REPEATABLE_READ
    查看全部
  • 事务管理器接口
    查看全部
  • TransactionStatus接口用来记录事务的状态 该接口定义了一组方法,用来获取或判断事务的相应状态信息. 平台事务管理器(PlatformTransactionManager)会根据TransactionDefinition中定义的事务信息(包括隔离级别、传播行为)来进行事务的管理,在管理的过程中事务可能产生了保存点或事务是新的事务等情况,那么这些信息都会记录在TransactionStatus的对象中.
    查看全部
  • 传播属性主要是Required,RequiresNew,Nested这三个 1.一个事务的方法A,一个标记事务传播属性为Required的方法B,B如果在方法A内,则方法B的事务只能用作回滚并且跟方法A是同一个事务 2.标记事务传播属性为RequiresNew的方法B,B如果在方法A内,则方法B的事务完全独立于方法A的事务,方法B的事务具有提交以及回滚性,即使方法A之后有回滚都不影响方法B的事务 3.标记事务传播属性为Nested的方法B,B如果在方法A内,则方法B的事务则具有多个保存点的回滚,但这不影响A的事务的进行,这个设置通常映射到JDBC保存点,所以只在jdbc的事务中有效。
    查看全部
  • 事务的传播行为:主要是解决业务层方法之间的相互调用的问题 事务的传播行为有七种,又分为三类: 第一类共同点:如果 A 方法中有事务,则调用 B 方法时就用该事务,即:A和B方法在同一个事务中。 PROPAGATION_REQUIRED:如果 A 方法中没有事务,则调用 B 方法时就创建一个新的事务,即:A和B方法在同一个事务中。 PROPAGATION_SUPPORTS:如果 A 方法中没有事务,则调用 B 方法时就不使用该事务。 PROPAGATION_MANDATORY:如果 A 方法中没有事务,则调用 B 方法时就抛出异常。 第二类共同点:A方法和B方法没有在同一个事务里面。 PROPAGATION_REQUIRES_NEW:如果 A 方法中有事务,则挂起并新建一个事务给 B 方法。 PROPAGATION_NOT_SUPPORTED:如果 A 方法中有事务,则挂起。 PROPAGATION_NEVER:如果 A 方法中有事务,则报异常。 第三类:如果 A 方法有的事务执行完,设置一个保存点,如果 B 方法中事务执行失败,可以滚回保存点或初始状态。 PROPAGATION_NESTED :如果当前事务存在,则嵌套事务执行 @重点的三种:PROPAGATION_REQUIRED, PROPAGATION_REQUIRES_NEW, PROPAGATION_NESTED。
    查看全部
  • 事务隔离级别 作用:为了解决脏读、不可重复读、幻读等安全问题 脏读:一个事务读取了另一个事务改写但未提交的数据,如果这些数据被回滚,则读到的数据是无效的 不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同 幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录 事务隔离级别(四种): DEFAULT 使用后端数据库默认的隔离级别(Spring中的选择项) READ_UNCOMMITED 允许你读取还未提交的但是改变了的数据。可能导致脏读,幻读,不可重复读 READ_COMMITED 允许在并发事务已经提交后读取。可防止脏读,但是幻读,不可重复读仍可发生 REPEATABLE_READ 对于相同的字段的多次读取是一致的,除非数据被事务本身改变。可防止脏读,不可重复读,但幻读仍可能发生。 SERIALIZABLE 完全服从ACID的隔离级别,确保不会发生脏,幻,不可重复读。这在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的 Mysql默认的隔离级别 REPEATABLE_READ Oracle默认的隔离级别 READ_COMMITED
    查看全部
  • 事务管理器对应框架选择(一般使用前两个) Spring根据不同的持久化框架提供不同 PlatformTransactionManager接口实现 (1)org.springframework.jdbc.datasource.DataSourceTransactionManager 使用Spring JDBC 或iBatis进行持久化数据时使用 (2)org.springframework.orm.hibernate3.HibernateTransactionManager 使用Hibernate3.0版本进行持久化数据时使用
    查看全部
  • Spring事务管理高层抽象常用的3个接口 PlatformTransactionManager 事务管理器(提交、回滚) TransactionDefinition 事务定义信息(隔离、传播、超时、只读) TransactionStatus 事务具体运行状态
    查看全部
    1 采集 收起 来源:接口介绍

    2017-02-12

举报

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

微信扫码,参与3人拼团

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

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