Spring中使用DataSourceTransactionManager进行事务管理的xml配置
在一个业务的实现过程中,可能需要多条sql完成对数据库的操作,比如账户登录,需要匹配用户名和密码,然后要增加积分,还要记录登录的ip和时间,这可能需要三个sql语句,这三个语句应当是一个整体,任意一个sql执行不成功,都表示这个业务没有执行完成,这就有了事务的概念。
事务是数据库中的概念,就是对数据库的一组操作,由一条或多条sql组成。
事务具有同步的特点,一条sql执行失败,其他sql都不会执行,即要么都执行,要么都不执行。
用START TRANSACTION开启一个事务,这之后执行的sql语句,在用COMMIT提交事务之前,都没有被"写死"到数据库中,可以用ROLLBACK进行回滚操作。
Spring在jdbc中提供了一个事务管理组件:org.springframework.jdbc.datasource.DataSourceTransactionManager
<!-- 配置事务管理组件 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dbcp"> <!-- dbcp是连接池组件(org.apache.commons.dbcp2.BasicDataSource)的bean -->
</bean>
使用事务管理的功能,跟创建bean一样,可以采用注解和xml配置两种方式。当然可能还有别的方式,还没学到
<!-- 采用注解方式:有源码的情况下,将注解加在方法上 -->
<!-- 开启事务注解标记@Transactional,当调用带@Transactional标记的方法时,将txManager的事务管理功能切入进去 -->
<tx:annotation-driven transactional-manager="txManager" />
<!-- 在需要事务管理的方法上加上@Transactional注解即可 -->
<!-- 采用xml配置的方式:使用别人写好的功能,没有源码,就可以用xml配置 -->
<tx:advice id="txAdvice" transaction-manager="txManager" > <!-- 仍然使用txManager作为事务管理组件 -->
<tx:attributes>
<tx:method name="updateTitleAndBody" /> <!-- 在哪些方法上添加事务管理 -->
<tx:method name="register" /> <!-- 这里写方法名 -->
<tx:method name="checkLogin" /> <!-- 支持通配符 -->
<tx:method name="listNotebook" />
<tx:method name="getDeletedNotes" />
</tx:attributes>
</tx:advice>
<!-- 通过aop机制完成事务管理 -->
<aop:config> <!-- 作用在哪些组件上 -->
<aop:pointcut id="target" expression="within(net.sonng.note.service.UserServiceImpl)" />
<!-- 这个expression的写法有讲究 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="target"/>
</aop:config>
其他:MyBatis应该也提供了事务管理的组件
Spring中使用DataSourceTransactionManager进行事务管理的xml配置的更多相关文章
- 0045 Spring中使用DataSourceTransactionManager进行事务管理的xml配置
在一个业务的实现过程中,可能需要多条sql完成对数据库的操作,比如账户登录,需要匹配用户名和密码,然后要增加积分,还要记录登录的ip和时间,这可能需要三个sql语句,这三个语句应当是一个整体,任意一个 ...
- Spring中实现多数据源事务管理
文章转自 https://www.2cto.com/kf/201507/424229.html 前言 由于项目中引入了多个数据源,并且需要对多个数据源进行写操作,那么多数据源的事务管理自然成了不可避 ...
- Java框架spring 学习笔记(十八):事务管理(xml配置文件管理)
在Java框架spring 学习笔记(十八):事务操作中,有一个问题: package cn.service; import cn.dao.OrderDao; public class OrderSe ...
- spring事务管理(xml配置)与spring自带连接数据库JdbcTemplate
什么是事务,很通俗的话来说就是,我们日常生活中总会出现在银行转账的业务,加入A向B转账100元,此时A的账户中应该减少100元,B的账户中增加100元,但是如果在A转完账B还没有接受的时候,服务器出现 ...
- spring+mybatis之声明式事务管理初识(小实例)
前几篇的文章都只是初步学习spring和mybatis框架,所写的实例也都非常简单,所进行的数据访问控制也都很简单,没有加入事务管理.这篇文章将初步接触事务管理. 1.事务管理 理解事务管理之前,先通 ...
- 事务隔离级别与传播机制,spring+mybatis+atomikos实现分布式事务管理
1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). 原子性(Atomicity):即事务是不可分割的最小工作单 ...
- Spring事务隔离级别与传播机制详解,spring+mybatis+atomikos实现分布式事务管理
原创说明:本文为本人原创作品,绝非他处转载,转账请注明出处 1.事务的定义:事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不成功,要么都成功.其必须遵循四个原则(ACID). ...
- Spring 多数据源 @Transactional 注解事务管理
在 Spring,MyBatis 下两个数据源,通过 @Transactional 注解 配置简单的事务管理 spring-mybatis.xml <!--******************* ...
- Spring 简单而强大的事务管理功能
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...
随机推荐
- 深入浅出 Java Concurrency (12): 锁机制 part 7 信号量(Semaphore)[转]
Semaphore 是一个计数信号量.从概念上讲,信号量维护了一个许可集.如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可.每个 release() 添加一个许可,从而可能释放 ...
- 谈一谈创建React Component的几种方式
当我们谈起React的时候,多半会将注意力集中在组件之上,思考如何将页面划分成一个个组件,以及如何编写可复用的组件.但对于接触React不久,还没有真正用它做一个完整项目的人来说,理解如何创建一个组件 ...
- PAT甲级——A1030 Travel Plan
A traveler's map gives the distances between cities along the highways, together with the cost of ea ...
- 《DSP using MATLAB》Problem 7.34
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- Finalize什么时候被调用
Finalize方法在垃圾回收结束时被调用,有五种一下情况会导致开始垃圾回收. 第0代已满 第0代满时,垃圾回收会自动开始.改时间是目前导致Finalize方法被调用的最常见的一种方式,因为随着应用 ...
- 通过pyppeteer来爬取今日头条
import asyncio from pyppeteer import launch async def main(): browser = await launch() page = await ...
- 【转载】TSN简介及相关资源
原文:https://blog.csdn.net/u012692537/article/details/86188392 一.简介 1.1 什么是TSN TSN(Time Sensitive Netw ...
- JDK8日期时间操作小汇总
统一使用java.time.*包下的类 1.获取当前的日期.时间.日期加时间 LocalDate todayDate = LocalDate.now(); //今天的日期 LocalTime now ...
- 前端(jQuery)(8)-- jQuery元素遍历
1.向下遍历 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- 20190815-$N \Theta IP$
$NOIP$ 请选择您想测试的难度: 「困难」 「困难的地狱」 「能被神犇切掉的」 「你做不出来的」 「简单(完成前面所有后解锁)」 要难死了-- 考试过程: 首先看看三道题: 这是NOIP模拟测试? ...