Spring框架之事务控制学习
声明式事务:
以前通过复杂的编程来编写一个事务,替换为只需要告诉Spring哪个方法是事务方法即可;Spring自动进行事务控制。
AOP的环绕通知可以去做
事务管理代码的固定模式作为一种横切关注点,可以通过AOP方法模块化,进而借助Spring AOP框架实现声明式事务管理
Spring已经提供了事务管理器
这个事务管理器就可以在目标方法运行前后进行事务控制(事务切面)
快速为某个方法添加事务:
1、配置出这个事务管理器让它工作
基于注解的方式
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
@Transactional注解
isolation
-Isolation
propagation
-Propagation
noRollbackFor
-Class
[]
noRollbackForClassName
-String
[]
rollbackFor
-Class
[]
rollbackForClassName
-String
[]
readOnly
-boolean
timeout
-int
如果一个事务使用了REQUIRED,那么它事务的属性就来继承上级的事务,比如超时,只读之类的属性
REQUIRED:将之前事务用的connection传递给这个方法使用
REQUIRED_NEW:创建一个新的connection
本类方法的调用都只有一个事务
XML版的事务控制
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<aop:config>
<aop:pointcut id="pt" expression="execution(* com.xiaokaige.dao.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="query" read-only="true" propagation="SUPPORTS"/>
<tx:method name="get" read-only="true" propagation="SUPPORTS"/>
<tx:method name="select" read-only="true" propagation="SUPPORTS"/>
<tx:method name="find" read-only="true" propagation="SUPPORTS"/>
<tx:method name="*" read-only="false" propagation="SUPPORTS"/>
</tx:attributes>
</tx:advice>
重要的用配置,不重要的用注解