Spring管理事物两种方式

1. 编程式事物管理(在开发中不经常使用)

使用步骤

1. 配置数据库事物管理 DataSourceTransactionManager
   <!--配置事物管理器-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
2. 配置数据库事物管理模板
  <!--配置事物管理模板-->
<bean id="transactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate">
<!--配置事物管理-->
<property name="transactionManager" ref="transactionManager"></property> </bean>
3. 在Service层中注入数据库事物管理模板
     <!--配置Service-->
<bean id="accountService" class="top.wintp.springtx.demo1.service.AccountServiceImpl"> <!--配置事物的管理模板类-->
<property name="transactionTemplate" ref="transactionTemplate"/> <property name="accountDao" ref="accountDao"/>
</bean>
4. 在需要执行事物的位置调用transactionTemplate的execute()方法
      transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@Override
protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) { //执行你的逻辑
}
});

2. 声明式事物管理

声明式事务管理方式一:基于TransactionProxyFactoryBean的方式 (不常用)

使用步骤
1.配置事物管理 DataResourceTransactionManager
     <bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
2.配置事物代理类
    <!--配置事务代理类-->
          <bean id="accountServiceProxy"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<!--配置事务管理器-->
<property name="transactionManager" ref="transactionManager"/> <!--配置代理目标类-->
<property name="target" ref="accountService"></property> <!--
配置事物的基本属性
必须配置
--> <property name="transactionAttributes">
<props> <!--
prop 格式
key:方法名 或者 方法 * 例如 insert* 值的格式:
PROPAGATION:事物的传播行为
ISOLATION:事物的隔离级别
readOnly:只读
-Exception:发生哪些异常,回滚事物 默认任何异常都回滚
+Exception:发生哪些异常,不回滚事物
--> <prop key="transfMoney">PROPAGATION_REQUIRED</prop> </props> </property>
</bean>
3.引用代理类 使用代理目标类来接收
        @Resource(name = "accountServiceProxy")
private AccountService mAccountService;

声明式事务管理方式二:基于AspectJ的XML方式

1.配置事物管理类
<!--配置事物的管理类-->
 <bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
2.配置事物的增强
  <!--配置事物的增强-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes> </tx:advice>

###### 3.配置AOP – 切点和切面

   <!--配置AOP-->
<aop:config>
<!--配置切入点-->
<aop:pointcut id="pointcut1"
expression="execution(* top.wintp.springtx.demo6.service.AccountService+.*(..))"/> <!--配置切面-->
<aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut1"/> </aop:config>

声明式事务管理方式三:基于注解的方式

1.配置事物管理器
  <!--配置事物的管理类-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
2.开启事物注解
  <!--开启事物注解
-->
<tx:annotation-driven transaction-manager="transactionManager"/>
3.在需要事物管理的类上添加注解
  @Transactional(propagation = Propagation.REQUIRED)

Spring管理事物两种方式的更多相关文章

  1. 使用web.xml方式加载Spring时,获取Spring context的两种方式

    使用web.xml方式加载Spring时,获取Spring context的两种方式: 1.servlet方式加载时: [web.xml] <servlet> <servlet-na ...

  2. Spring中事务管理的两种方式

    spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager.对于编程式事务 ...

  3. Spring 注入的两种方式

    Spring 的两种注入方式: 1. 属性注入:通过无参构造函数+setter方法注入 2. 构造注入:通过有参的构造函数注入. 优缺点: 1. 属性注入直白易懂,缺点是对于属性可选的时候,很多个构造 ...

  4. Spring事务管理的两种方式

    参考文档: http://www.iteye.com/topic/1123347 http://blog.csdn.net/lcj8/article/details/2835432 PS:好像还是tx ...

  5. 使用aspectJ实现Spring AOP的两种方式

    方式一:基于aspectJ的XML配置 方式二:基于aspectJ的注解方式 基于aspectJ的XML配置 1)       引入相关jar包 2)       创建Spring核心配置文件,必须导 ...

  6. Linux 服务管理的两种方式service和systemctl

    service命令 service命令其实是去/etc/init.d目录下,去执行相关程序 ``` # service命令启动redis脚本 service redis start # 直接启动red ...

  7. Nginx集群session管理的两种方式

    1.IP_HASH 修改nginx配置文件 实现非常简单,但是绑定在一个服务器上了,不能跨越多个服务. 2.redis管理 管理session信息的空间,需要修改tomcat配置文件 下载相应的red ...

  8. 数据库链接 mybatis spring data jpa 两种方式

    jdbc mybatis                     spring data jpa dao service webservice jaxrs     jaxws  springmvc w ...

  9. Spring 依赖注入两种方式

    (1):通过 setter 方法注入: <property name=“ ” ></property> 其中,name属性的取值依setter方法名而定,要求这个类里面这个对应 ...

随机推荐

  1. 通过Graphics对象获取它所属的Control

    using System.Runtime.InteropServices;   [DllImport("user32.dll")] public static extern Int ...

  2. .net core 2.0 dbfirst 报 dotnet ef 未找到与命令“dotnet-ef”匹配的可执行文件的解决办法

    问题描述: 最近研究了一段时间.netcore dbfirst,新建类库用来生成实体模型,执行命令总是提示 未找到与命令“dotnet-ef”匹配的可执行文件,根据网上的解决办法引用 Microsof ...

  3. BITED数学建模七日谈之一:参加全国大学生数学建模比赛前你需要积累哪些

    大家好,我是数学中国的版主magic2728,非常高兴能够借助数学中国这个平台分享一些自己的经验,帮助大家在国赛的最后备战中能够最后冲刺提高.分享一共分为七个部分,分七天写给大家,下面是第一个部分:参 ...

  4. SpringBoot自定义注解@YamlPropertySource加载yml或者yaml文件(扩展了@PropertySource)

    1:概述 SpringBoot的@PropertySource注解只支持加载 properties结尾的文件.当使用@ConfigurationProperties 注解配合@EnableConfig ...

  5. 【转载】Chrome使用自定义协议打开本地程序并运行IE打开网页

    部分内容转载自: http://blog.sina.com.cn/s/blog_e2b8213a0102wqby.html 项目中遇到某需求:chorme要运行IE并打开网页.解决方案之一就是通过自定 ...

  6. RSA der加密 p12解密以及配合AES使用详解

    在前面的文章中我有说过AES和RSA这两种加密方式,正好在前段时间再项目中有使用到,在这里再把这两种加密方式综合在一起写一下,具体到他们的使用,以及RSA各种加密文件的生成. 一: RSA各种加密相关 ...

  7. Python 爬虫从入门到进阶之路(八)

    在之前的文章中我们介绍了一下 requests 模块,今天我们再来看一下 Python 爬虫中的正则表达的使用和 re 模块. 实际上爬虫一共就四个主要步骤: 明确目标 (要知道你准备在哪个范围或者网 ...

  8. java多线程死锁

    进程(线程)同步的基本概念 进程之间的制约关系 1. 直接制约关系(进程同步) 这个关系主要源于进程合作,例如,有一个输入进程A通过单缓冲向进程B提供数据,当该缓冲空时,进程B因为不能获得所需数据而被 ...

  9. string类总结第一部分函数介绍

    在前面几章,看了整个String类的源码,给每个方法都行写了注释,但是太过凌乱,今天我就把String类的方法整理归纳,然后再讲一下String类比较难以理解的部分 特此声明:本文篇幅较大,涵盖知识点 ...

  10. Educational Codeforces Round 66 (Rated for Div. 2) A

    A. From Hero to Zero 题目链接:http://codeforces.com/contest/1175/problem/A 题目 ou are given an integer n ...