Spring框架关于事务处理的API和使用步骤
Spring中的事务管理全部要经过事务管理器来实现.
因此无论是注解的方式还是xml的方式实现的事务都必须要配置事务管理器.
因为事务是基于数据库连接的,所以事务管理器依赖于连接池创建的连接,因此事务管理器需要注入连接池属性.
一.Spring基于注解的事务管理
spring 关于事务管理的3个API:
PlatformTransactionManager
①DataSourceTransactionManager:JDBC的事务管理器
②HibernateTransactionManager:Hibernate的事务管理器TransactionDefinition:
TransactionStatus:
①导入jar(4个核心+日志+spring-jdbc+spring-tx)
②把数据库连接池交给spring管理
<!-- 引入外部资源文件 -->
<context:property-placeholder location="classpath:db.properties"/><!-- 配置数据库连接池 --><bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property></bean>
③将事务管理器交给spring管理并注入数据源
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 注入数据源 --><property name="dataSource" ref="datasource"></property></bean>
④开启spring 管理事务的注解驱动,与事务管理器对应
<tx:annotation-driven transaction-manager="transactionManager"/>
⑤在需要进行事务管理的业务方法上加@Transactional注解即可.
二.Spring基于Xml的事务管理:
因为spring把事务管理的过程(取消连接的自动提交,回滚等)封装在了事务管理器中,因此这些抽取出来的方法和过程应该作为切面类作用在业务方法中.
①将事务管理器交给spring 管理,并作为一个切面类
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 注入数据源 --><property name="dataSource" ref="datasource"></property></bean>
②将通知作用在切面类上,和平台事务管理器进行关联
<!-- 通知 --><tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><!-- 传播行为 --><tx:method name="save*" propagation="REQUIRED" /><tx:method name="insert*" propagation="REQUIRED" /><tx:method name="add*" propagation="REQUIRED" /><tx:method name="create*" propagation="REQUIRED" /><tx:method name="delete*" propagation="REQUIRED" /><tx:method name="update*" propagation="REQUIRED" /><tx:method name="find*" propagation="SUPPORTS" read-only="true" /><tx:method name="select*" propagation="SUPPORTS" read-only="true" /><tx:method name="get*" propagation="SUPPORTS" read-only="true" /><tx:method name="query*" propagation="SUPPORTS" read-only="true" /></tx:attributes></tx:advice>
③将切入点表达式作用在通知上,和通知进行关联
<aop:config><aop:advisor advice-ref="txAdvice"pointcut="execution(* com.sms.spring.service.impl.*(..))" /></aop:config>
三.关于事务的四个属性
- 事务的传播行为:Propagation
用法:@Transactional(propagation=Propagation.REQUIRED):设置为必须使用调用者的事务 - 事务的隔离级别:Isolation
用法:@Transactional(isolation=Isolation.READ_COMMITTED):设定隔离级别为读已提交 - 事务的超时回滚:timeOut
用法:@Transactional(timeout=3):事务执行三秒未完成后进行强制回滚 - 事务的是否只读:read-only
用法:@Transactional(readOnly=true):设定为只读
Spring框架关于事务处理的API和使用步骤相关推荐
- Day3-Spring的事务管理、Spring框架的JDBC模板
今天内容 1. Spring框架的AOP之注解的方式2. Spring框架的JDBC模板3. Spring框架的事务管理 案例一:使用Spring框架的AOP技术对DAO层的功能进行增强 案例一:使用 ...
- Spring框架整合JUnit单元测试
1. 为了简化了JUnit的测试,使用Spring框架也可以整合测试 2. 具体步骤* 要求:必须先有JUnit的环境(即已经导入了JUnit4的开发环境)!!* 步骤一:在程序中引入:spring- ...
- 大数据WEB阶段Spring框架(三)声明式事务处理
Spring整合JDBC-声明式的事务处理 一.Spring整合JDBC步骤 导入jar包 编写数据库配置文件 也可以将数据库配置信息单独配置后引入Spring容器中 代码中使用 二.Spring框架 ...
- Spring教程:使用Spring框架和Spring Boot创建Hello World REST API
由于Java社区对早期版本的Enterprise Java感到失望,因此创建了Spring Framework . 从那时起,它已经发展成为一个巨大的生态系统,可以解决构建基于Web的Java应用程序 ...
- 使用Spring框架实现数据库事务处理
企业级应用系统在更新数据库数据时,一般都采用数据库事务处理,以确保数据库数据的一致性.本文主要讨论在Spring框架中如何使用数据库事务处理更新数据库数据.通过本课的学习,可以达到如下目标. ● 了解 ...
- 使用Spring框架的好处
转自:https://www.cnblogs.com/hoobey/p/6032506.html 在SSH框假中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JD ...
- 使用Spring框架的好处(转帖)
在SSH框架中使用Spring的好处 在SSH框假中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书 ...
- Spring框架的事务管理及应用
Spring框架简介 Spring框架是一个2003年2月才出现的开源项目,该开源项目起源自Rod Johnson在2002年末出版的<Expert One-on-One J2EE Design ...
- Spring框架的前世今生以及对Spring的宏观认识
Spring 的前世今生 相信经历过不使用框架开发 Web 项目的 70 后.80 后都会有如此感触,如今的程序员开发项目太轻松 了,基本只需要关心业务如何实现,通用技术问题只需要集成框架便可.早在 ...
最新文章
- SpringBoot接口频繁超时,长时间找不到原因,我用 Arthas 定位到了
- 德鲁克的17条思想精髓,读懂管理的本质
- quartz持久化是指_面试必问:Redis 持久化是如何做的?RDB 和 AOF 对比分析
- mysql5.5.3下载_MySQL5.5.5M3发布-下载_MySQL
- 【项目管理】八大绩效域裁剪考虑事项
- 在oracle中如何复制用户的权限不够,linux 普通用户下 移动或复制一个zip文件权限不够怎么办...
- PHP自动查找指定文件夹下所有文件BOM和删除所有文件
- C语言里最基础的关键字
- 设计实现优雅修改redux数据流的一个库 - redux-chef
- 程序运行 栈帧分析 以及 修改栈帧中数据以及函数地址
- HTML (3)---HTML编辑器
- 桥接模式(Birdge)
- Fiddler环境配置教程
- sumo 仿真输出转trj文件 用于SSAM分析
- Win10 LTSB 2016 激活
- cad延伸快捷键_CAD绘图大师都在用的46组快捷键,高效绘图必备
- linux的normal模式,解决grub rescue问题时发现grub/目录下没有文件normal.mod怎么办?...
- 拉格朗日乘数法求解技巧2
- 移动硬盘安装ubuntu后问题记录:windows 开机进入grub界面
- 恶搞php表情包,PS制作搞笑的金馆长表情或修改金馆长表情文字
热门文章
- LeetCode-链表-203. 移除链表元素
- Python编程基础:第四十六节 super函数Super Function
- Python编程基础:第二十八节 随机数Random Numbers
- 【LeetCode从零单排】No133. clon graph (BFS广度优先搜索)
- 优酷蓝鲸近千节点的Redis集群运维经验总结
- Active Object 并发模式在 Java 中的应用--转载
- Open quote is expected for attribute {1} associated with an element type name.
- Navicat通过跳板机连接数据库
- 关于Rocchio算法和向量空间模型反馈
- Visual Studio 2013开发 mini-filter driver step by step 获取文件读写内容(6)