Spring事务相关记录

一、注解事务的使用:

<!-- 数据源 -->
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" destroy-method="close">
  <property name="driverClassName" value="${db.driverClassName}" />
  <property name="url" value="${db.url}" />
  <!-- 相关配置 -->
</bean>

<!-- 事务配置 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource" />
</bean><!-- 没有指定 proxy-target-class="true" 则默认spring会自动挑选jdk代理或cglib代理。--><tx:annotation-driven transaction-manager="transactionManager" />

<!-- 扫描注解 -->
<context:component-scan base-package="com.thunder.practice" />

关于@Transactional的添加位置:

当使用jdk代理的时候,由于是基于接口的代理,此时可以将@Transactional放到接口定义,或接口方法上,所有继承该接口的类、方法,都将继承事务。也可以放到实现类的类定义或者某个方法上。

当使用cglib代理的时候,由于是基于类的代理,此时如果将@Transactional放到接口定义,或接口的方法上,则此时事务将失效,但不会抛异常。

因此建议将@Transactional的注解放在实现类的类定义或者具体方法之上。另外在方法上的@Transactional注解会覆盖掉类上的注解。

ps.还有一种常见的事务失效的错误:

sprign mvc+spring 的项目结构时,如果分成两个配置文件,一个由spring mvc的配置文件(由dispatcher servlet调用的配置文件)和spring的配置文件(由listener调用的配置文件)是不同的上下文对象(父子上下文,父子容器)。spring配置文件属于父上下文,里面定义了事务管理,事务管理是有这个上下文控制的,mvc配置文件属于子上下文,一般会把扫描注解的配置放到mvc配置文件,此时mvc的上下文扫描到的Service是没有经过事务加强的service,(ps.事务管理的本质是AOP增强处理),所以事务没有生效,也不会报错。

解决办法是将事务管理和扫描@Transactional注解进行增强的配置放在一个上下文就行了。

二、事务的隔离级别和传播方法

时间: 2024-09-29 06:01:04

Spring事务相关记录的相关文章

Spring 事务相关点整理

Spring和事务的关系 关系型数据库.某些消息队列等产品或中间件称为事务性资源,因为它们本身支持事务,也能够处理事务. Spring很显然不是事务性资源,但是它可以管理事务性资源,所以Spring和事务之间是管理关系. 就像起码很多领导虽然不会写代码,但是他却管理着一大批会写代码的码农. Spring事务三要素 数据源:表示具体的事务性资源,是事务的真正处理者,如MySQL等. 事务管理器:像一个大管家,从整体上管理事务的处理过程,如打开.提交.回滚等. 事务应用和属性配置:像一个标识符,表明

Spring 事务相关及@Transactional的使用建议

使用步骤: 步骤一.在spring配置文件中引入<tx:>命名空间<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation

Spring事务相关接口以及实现类

目标 为后续分析事务源码前做一个介绍,有些属性可能光看这个依然看不懂,当看下篇文章Spring事务源码分析的时候就知道了. PlatformTransactionManager /** * Spring事务抽象的顶级接口 * 以下所说的具体行为以DataSourceTransactionManager这个实现类为准 */ public interface PlatformTransactionManager { /** * 开启一个事务, 即从给定的数据源中获取一个连接,关闭自动提交模式,并且将

Spring 事务相关

事务类型 数据库事务类型有本地事务和分布式事务: 本地事务:就是普通事务,能保证单台数据库上的操作的ACID,被限定在一台数据库上: 分布式事务:涉及两个或多个数据库源的事务,即跨越多台同类或异类数据库的事务(由每台数据库的本地事务组成的),分布式事务旨在保证这些本地事务的所有操作的ACID,使事务可以跨越多台数据库: Java事务类型有JDBC事务和JTA事务: JDBC事务:就是数据库事务类型中的本地事务,通过Connection对象的控制来管理事务: JTA事务:JTA指Java事务API

记录分享公司Spring data相关配置

起因 公司Spring Data相关的配置还是有点意思的,不过蛮复杂的...XML很多...我不太喜欢强行记住....所以我打算记录一下配置的大致思路和结构,以后可能会有用.... 总体结构 总体结构大致就是这样..Spring/data这个文件夹主要配置Spring Data相关的配置. data下主要有2个文件夹:datasource和module,还有一些其他的XML和properties XML和properties data-context.xml <import resource=&qu

spring事务管理及相关知识

最近在项目中遇到了spring事务的注解及相关知识,突然间感觉自己对于这部分知识只停留在表面的理解层次上,于是乎花些时间上网搜索了一些文章,以及对于源码的解读,整理如下: 一.既然谈到事务,那就先搞清到底什么是事务,或者说,Spring事务管理中的事务到底是指什么? 1.事务(Transaction),通常是指数据库的事务,在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit),例如insert .update.delete等,事务是恢复和并发控制的基本单位. 2.事务

spring相关记录

2018-11-01 ,本文 70 字,阅读全文约需 1 分钟 org.springframework.web.servlet.handler.SimpleUrlHandlerMapping 自定义相关映射 Blog 链表的并发安全 oracle索引 spring相关记录 Oracle的sql优化 责任链模式 双重检查的单例模式为啥需要使用volatile volatile原理 synchronized原理 同步工具类 代理模式 jdk8的新特性 Oracle的各种连接 jvm 工作中遇到的一些

Spring事务超时、回滚的相关说明

事务超时: @Transactional(timeout = 60) 如果用这个注解描述一个方法的话,线程已经跑到方法里面,如果已经过去60秒了还没跑完这个方法并且线程在这个方法中的后面还有涉及到对数据库的增删改查操作时会报事务超时错误(会回滚). 如果已经过去60秒了还没跑完但是后面已经没有涉及到对数据库的增删改查操作,那么这时不会报事务超时错误(不会回滚). 回滚: Spring管理事务默认回滚的异常是什么? 答案是 RuntimeException或者Error. 注意:如果事务在try{

Spring事务管理(详解+实例)

写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都