一、声明式事务
1、基于xml的声明式事务
使用步骤:
- 配置事务管理器
<!--1 创建事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入数据源-->
<property name="dataSource" ref="dataSource"></property>
</bean>
- 配置事务通知
<!--2 配置通知-->
<tx:advice id="txadvice">
<!--配置事务参数-->
<tx:attributes>
<!--指定哪种规则的方法上面添加事务-->
<tx:method name="accountMoney" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
- 配置aop
<!--3 配置切入点和切面-->
<aop:config>
<!--配置切入点-->
<aop:pointcut id="pt" expression="execution(* com.keller.spring.dao.UserDaoImpl.*(..))"/>
<!--配置切面,建立通知和切入点的关系-->
<aop:advisor advice-ref="txadvice" pointcut-ref="pt"/>
</aop:config>
如何写切入点execution表达式
execution(修饰符? 返回值 类路径? 方法名(方法参数) 异常类型?)
后面带?的表示可以省略的,没带的表示必须有的
如:execution(* *Message(..)) 匹配任何返回值的方法名为*Message的参数为任何类型的方法
2、基于注解的声明式事务
使用步骤:
- 配置事务管理器
<!--创建事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入数据源-->
<property name="dataSource" ref="dataSource"></property>
</bean>
- 开启spring对注解事务的支持
<!--开启事务注解-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
- 在需要事务管理的方法上加上@Transactional注解
二、编程式事务使用
如果只有很少量的事务操作,编程式事务管理通常是很好的选择
使用步骤:
- 引入TransactionManager
@Autowired
private DataSourceTransactionManager transactionManager;
- 获取事务
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
TransactionStatus transaction = transactionManager.getTransaction(definition);
- 提交/回滚事务
transactionManager.commit(transaction);
transactionManager.commit(transaction);