-
编程式事务查看全部
-
事务传播行为(七中)查看全部
-
事务管理接口查看全部
-
/** * @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 事务具体运行状态查看全部
举报
0/150
提交
取消