配置事务是通过AOP实现的,也就是通过代理模式对一个应该原子性的事务进行增强。其底层还是通过connection的setautocommit等方法来实现的。
一,通过XML的方式
首先会有一个需要被事务管理的方法:
比如一个service:
public class accountService {
public void a(){
//在这里进行一些经典的比如入账出账的业务
}
}
applicationContext.xml中的配置:
<bean id="accountService" class="com.web.service.accountService"/>
<!-- 配置一个平台事物管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置通知,这里只能配置属性,比如超时时间之类的,并不能直接指定织入的方法-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.web.service.accountService.*(..))"/>
</aop:config>
需要注意的时tx:advice中的配置,其中配置的method,并不意味着在这里直接配置织入,而是在这里配置了事务的defination,比如超时时间等。
二,注解配置
注解配置仅需要在需要被管理的方法上加注解@Transactional。
public class accountService {
@Transactional(timeout = -1,readOnly = true)
public void a(){}
}
并且在applicationContext.xml中配置注解驱动:
<tx:annotation-driven/>