Spring事务管理

Posted boy-li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring事务管理相关的知识,希望对你有一定的参考价值。

---恢复内容开始---

声明式事务

applicationContext.xml配置

第一种,使用tx标签方式

<!-- 配置事务管理器 -->

<bean id="txManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource"  ref="数据源deBean的id"/>
</bean>

<!-- 第一种配置事务的方式 ,tx-->
<tx:advice id="txadvice" transaction-manager="transactionManager">
    <tx:attributes>
     <!-- 设置事务增强的属性 --> <tx:method name="add*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="modify*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="del*" propagation="REQUIRED" rollback-for="Exception"/> <tx:method name="*" propagation="REQUIRED" read-only="true"/> </tx:attributes> </tx:advice>
<!-- 定义切入点 -->
<aop:config>
     <aop:pointcut id="serviceMethod" expression="execution(* com.dao.*.*(..))"/>
     <aop:advisor pointcut-ref="
serviceMethod" advice-ref="txadvice"/>

</aop:config>
 

Spring事务类型详解:


 


PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。


PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。


PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。


PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。


PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。


PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。


PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。


第二种,使用注解方式

<!-- 开启注解来配置的事务 -->
<tx:annotation-driven transaction-manager="txManager"/>

使用@Transactional注解注解类或方法

@Transactional   //注解配置

public class UserServiceImpl implements UserService{}

在类上注解为整个的所有方法都配置了事务

 

@Transactional   //注解配置

public boolean add(Bill bill);

在方法上注解单独为这个方法配置事务

 

 

 















以上是关于Spring事务管理的主要内容,如果未能解决你的问题,请参考以下文章

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

Spring boot:thymeleaf 没有正确渲染片段

What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段

spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

Spring Rest 文档。片段生成时 UTF-8 中间字节无效 [重复]

使用 Git 来管理 Xcode 中的代码片段