博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring事务控制相关的应用程序接口
阅读量:3959 次
发布时间:2019-05-24

本文共 1884 字,大约阅读时间需要 6 分钟。

备注:网上相关的转载文章实在是乱如麻,且大多都一模一样没什么新意,赘述不清的还是赘述不清,搞得人真就一头雾水。今天就当是在给自己做学习笔记的备份上传到网上吧,至少整理得自己比较满意,需要深度学习的话推荐去看正版书,网上乱七八糟的资料容易让人摸不清方向。

事务处理位于JavaEE分层开发体系中的业务层,Spring事务控制的实现全部基于AOP,其既可采用编程的方式实现,也可采用配置的方式实现,我们重点学习如何采用配置实现对事务的控制。

PlatformTransactionManager平台事务管理器接口主要用于完成事务的提交、回滚以及获取事务的状态信息。

    获取事务的状态:TransactionStatus getTransaction(TransactionDefinition definition)
    提交事务:void commit(TransactionStatus status)
    回滚事务:void rollback(TransactionStatus status)
    Spring事务的默认回滚方式:运行时异常(程度重) / 受查时异常(程度轻,也称编译异常,包括继承Exception的自定义异常)。

常用的两个实现类

    ① DataSourceTransactionManager:采用Spring JDBC或iBatis进行数据持久化时使用。
    ② HibernateTransactionManager:采用Hibernate进行数据持久化时使用。

TransactionDefinition事务定义接口中定义了事务隔离级别、事务传播行为常量以及事务的默认超时时限。

    事务常用API
    ① 获取事务的名称:String getName()
    ② 获取事务的隔离级别:int getIsolationLevel()
    ③ 获取事务的传播行为:int getPropagationBehavior()
    ④ 获取事务的超时时限:int getTimeout()
    ⑤ 是否对只读事务(查询)进行优化:boolean isReadOnly()

    事务隔离级别(5个) - 反映事务提交并发访问时的处理方式

    ① 事务的默认隔离级别:ISOLATION_DEFAULT,MySQL默认隔离级别为4,表示可重复读;Oracle默认隔离级别为2,表示可读和提交
    ② 读已提交(解决脏读,存在幻读与不可重复读):ISOLATION_READ_COMMITTED
    ③ 读未提交(未解决任何并发问题):ISOLATION_READ_UNCOMMITTED
    ④ 可重复读(解决脏读和不可重复读,存在幻读):ISOLATION_REPEATABLE_READ
    ⑤ 串行化(不存在并发问题):ISOLATION_SERIALIZABLE
在这里插入图片描述
    事务传播行为常量(7个)
    * PROPAGATION_REQUIRED:指定的方法必须在事务内执行,默认值。
    * PROPAGATION_SUPPORTS:指定的方法支持当前事务,若当前没有事务,也可以以非事务的方式执行。
    * PROPAGATION_MANDATORY:指定的方法必须在当前事务内执行,若当前没有事务则直接抛出异常。
    * PROPAGATION_REQUIRES_NEW:总是创建新的事务,若当前存在事务则将当前事务挂起,直至新的事务执行完毕。
    * PROPAGATION_NOT_SUPPORTED:指定的方法不能在事务环境中执行,若当前存在事务则挂起事务。
    * PROPAGATION_NEVER:指定的方法不能在事务环境中执行,若当前存在事务则直接抛出异常。
    * PROPAGATION_NESTED:指定的方法必须在事务内执行。

    事务默认超时时限 - TIMEOUT_DEFAULT

    该常量定义着事务底层默认的超时时限以及不支持事务超时时限时设置的none值,事务的超时时限起作用的条件繁多且超时的时间计算点较为复杂,因此我们一般仅使用其默认值。

    TransactionStatus事务状态接口提供了6个获取事务具体运行状态的方法。

    ① 刷新事务:void flush()
    ② 设置事务回滚:void setRollbackOnly()
    ③ 事务是否回滚:boolean isRollbackOnly()
    ④ 事务是否是新的事务:boolean isNewTransaction()
    ⑤ 事务是否已经完成:boolean isCompleted()
    ⑥ 事务是否处于存储点:boolean hasSavepoint()

你可能感兴趣的文章
很好的一篇文章 如果让我重做一次研究生 王汎森
查看>>
保护U盘批处理文件
查看>>
hibernate 自动导入sql 文件import.sql 国际化编码的问题的解决方案
查看>>
第七颗头骨 & 忘魂花 凤凰
查看>>
李小龙哲学之言
查看>>
[心情] 如果有一天
查看>>
[Linux] 常用 linux 系统命令及维护备忘
查看>>
[Linux] 关于 Ext4 HowTo
查看>>
[杂记] 新年物语&关于Mysql引擎性能测试
查看>>
[心得] 近期更新&关于Infobright
查看>>
[杂记] 流量统计 & 短信接口
查看>>
[中间件] 消息处理利器 ActiveMQ 的介绍 & Stomp 协议的使用
查看>>
[设计] 原型界面设计利器 Balsamiq Mockups 推荐
查看>>
[闲话] 在西方的程序员眼里,东方的程序员是什么样的
查看>>
[管理] 成功之路的探寻 —— “三力” 理论
查看>>
[连载] Socket 深度探索 4 PHP (一)
查看>>
[无线] Android 系统开发学习杂记
查看>>
[无线] 浅析当代 LBS 技术
查看>>
[杂感] 缅怀乔布斯
查看>>
[无线] 让Android支持cmwap上网
查看>>