@Transactional
可以标记在类,方法
建议写在方法上。如果类和方法都有,优先识别方法上的。
建议写在业务逻辑类上。
事务配置的属性
isolation:设置事务的隔离级别
propagation:事务的传播行为
脏读: 一个事物不读另一个没有提交的数据;
不可重复读针对1行数据;
幻读针对表;
原子性,隔离性,一致性,持久性;
隔离级别:读未提交,读已提交,可重复读,序列化;
mysql 默认隔离级别 可重复读;
oracle 默认读已提交;
事务的传播特性:
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=36dab731b7124fa3b02d03aa7e85a8b6.png?,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANTk2NTA2Njc4,size_20,color_FFFFFF,t_70,g_se,x_16
开启新事务,需父方法和子方法不在一个类里面。
用于记录操作流水等场景。
超时属性 timeout
指定事务最长等待时间
如果基于注解的配置和xml的事务都配置了,以注解的优先。
推荐用注解的方式。
注解的方式显的更灵活。 xml 配置一次切点就好。
-----------------------------------xml 配置-------------------------------------------------
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--基于注解方式的事务,开启事务的注解驱动
如果基于注解的和xml的事务都配置了会以注解的优先
-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
<!--用于声明事务切入的所有方法-->
<aop:config>
<aop:pointcut id="transactionCut" expression="execution(* cn.abc.service.impl.*.*(..))"/>
</aop:config>
<!--用来明确切点匹配到的方法哪些方法需要使用事务-->
<tx:advice>
<tx:attributes>
<!--可以使用通配符-->
<tx:method name="add*"/>
<tx:method name="update*"/>
<tx:method name="delete*"/>
<tx:method name="get*" read-only="true" propagation="SUPPORTS"></tx:method>
<tx:method name="query*" read-only="true"></tx:method>
</tx:attributes>
</tx:advice>
Spring事务的实现方式和实现原理;
说一下Spring的事务的传播行为;
说一下spring的事务隔离?
spring框架的事务管理有哪些优点?