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和使用步骤相关推荐

  1. Day3-Spring的事务管理、Spring框架的JDBC模板

    今天内容 1. Spring框架的AOP之注解的方式2. Spring框架的JDBC模板3. Spring框架的事务管理 案例一:使用Spring框架的AOP技术对DAO层的功能进行增强 案例一:使用 ...

  2. Spring框架整合JUnit单元测试

    1. 为了简化了JUnit的测试,使用Spring框架也可以整合测试 2. 具体步骤* 要求:必须先有JUnit的环境(即已经导入了JUnit4的开发环境)!!* 步骤一:在程序中引入:spring- ...

  3. 大数据WEB阶段Spring框架(三)声明式事务处理

    Spring整合JDBC-声明式的事务处理 一.Spring整合JDBC步骤 导入jar包 编写数据库配置文件 也可以将数据库配置信息单独配置后引入Spring容器中 代码中使用 二.Spring框架 ...

  4. Spring教程:使用Spring框架和Spring Boot创建Hello World REST API

    由于Java社区对早期版本的Enterprise Java感到失望,因此创建了Spring Framework . 从那时起,它已经发展成为一个巨大的生态系统,可以解决构建基于Web的Java应用程序 ...

  5. 使用Spring框架实现数据库事务处理

    企业级应用系统在更新数据库数据时,一般都采用数据库事务处理,以确保数据库数据的一致性.本文主要讨论在Spring框架中如何使用数据库事务处理更新数据库数据.通过本课的学习,可以达到如下目标. ● 了解 ...

  6. 使用Spring框架的好处

    转自:https://www.cnblogs.com/hoobey/p/6032506.html 在SSH框假中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JD ...

  7. 使用Spring框架的好处(转帖)

    在SSH框架中使用Spring的好处 在SSH框假中spring充当了管理容器的角色.我们都知道Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书 ...

  8. Spring框架的事务管理及应用

    Spring框架简介 Spring框架是一个2003年2月才出现的开源项目,该开源项目起源自Rod Johnson在2002年末出版的<Expert One-on-One J2EE Design ...

  9. Spring框架的前世今生以及对Spring的宏观认识

    Spring 的前世今生 相信经历过不使用框架开发 Web 项目的 70 后.80 后都会有如此感触,如今的程序员开发项目太轻松 了,基本只需要关心业务如何实现,通用技术问题只需要集成框架便可.早在 ...

最新文章

  1. SpringBoot接口频繁超时,长时间找不到原因,我用 Arthas 定位到了
  2. 德鲁克的17条思想精髓,读懂管理的本质
  3. quartz持久化是指_面试必问:Redis 持久化是如何做的?RDB 和 AOF 对比分析
  4. mysql5.5.3下载_MySQL5.5.5M3发布-下载_MySQL
  5. 【项目管理】八大绩效域裁剪考虑事项
  6. 在oracle中如何复制用户的权限不够,linux 普通用户下 移动或复制一个zip文件权限不够怎么办...
  7. PHP自动查找指定文件夹下所有文件BOM和删除所有文件
  8. C语言里最基础的关键字
  9. 设计实现优雅修改redux数据流的一个库 - redux-chef
  10. 程序运行 栈帧分析 以及 修改栈帧中数据以及函数地址
  11. HTML (3)---HTML编辑器
  12. 桥接模式(Birdge)
  13. Fiddler环境配置教程
  14. sumo 仿真输出转trj文件 用于SSAM分析
  15. Win10 LTSB 2016 激活
  16. cad延伸快捷键_CAD绘图大师都在用的46组快捷键,高效绘图必备
  17. linux的normal模式,解决grub rescue问题时发现grub/目录下没有文件normal.mod怎么办?...
  18. 拉格朗日乘数法求解技巧2
  19. 移动硬盘安装ubuntu后问题记录:windows 开机进入grub界面
  20. 恶搞php表情包,PS制作搞笑的金馆长表情或修改金馆长表情文字

热门文章

  1. LeetCode-链表-203. 移除链表元素
  2. Python编程基础:第四十六节 super函数Super Function
  3. Python编程基础:第二十八节 随机数Random Numbers
  4. 【LeetCode从零单排】No133. clon graph (BFS广度优先搜索)
  5. 优酷蓝鲸近千节点的Redis集群运维经验总结
  6. Active Object 并发模式在 Java 中的应用--转载
  7. Open quote is expected for attribute {1} associated with an element type name.
  8. Navicat通过跳板机连接数据库
  9. 关于Rocchio算法和向量空间模型反馈
  10. Visual Studio 2013开发 mini-filter driver step by step 获取文件读写内容(6)