Spring 配置只读事务

简介: 讲述 Spring 只读事务配置

只读事务是什么?

只读事务是指从这一点设置的时间点开始,到这个事务结束的过程中,其他事务所提交的数据,该事务看不见。


只读事务的作用

在 MySQL 上的只读事务,可以用来优化 InnoDB 表上查询事务创建的效率,并可以提供非锁定查询的性能。

InnoDB 引擎通过以下两种方式来检测一个事务是否是只读事务:

  1. 通过 START TRANSACTION READ ONLY 语句来检测。在读事务中如果有对数据库的修改操作(InnoDB,MyISAM 或其他类型的数据表),那么将会产生一个错误,并且事务会继续以只读事务进行。但是在只读事务中,你可以对 session 级别的临时表进行操作,又或者执行一个锁定查询。这是因为这些修改和加锁操作对其他事务是不可见的。
  2. 打开 autocommit 设置,此时事务确保只有一个 SQL 语句被执行,并且事务中的语句是一个非锁定查询的语句。非锁定查询的语句指的是不使用 FOR UPDATELOCK IN SHARED MODE 限制的查询语句。这样,针对报表生成这类查询比较集中的应用,你可以将一些查询语句组合起来放在一个 START TRANSACTION READ ONLYCOMMIT 语句中间,或者在执行查询语句前打开 autocommit 设置,又或者避免在事务中的多个语句中包含导致数据变化的语句。


只读事务的优点是什么?

由于只读事务不存在数据的修改,因此数据库将会为只读事务提供一些优化手段。例如:

  • Oracle 对于只读事务,不启用回滚段,不记录回滚 log。
  • MySQL 可以避免为已知的只读事务设置事务 ID(TRX_ID 字段)所带来的开销。事务 ID 仅用于可能执行写操作或锁读(如 SELECT …… FOR UPDATE)的事务。消除不必要的事务 ID 可以减少每次查询或数据更改语句构造读视图时所查询的内部数据结构大小。
相关文章
|
13天前
|
存储 Java 数据安全/隐私保护
|
16小时前
|
SQL Java 关系型数据库
Spring 事务
Spring 事务
6 1
|
18小时前
|
Java Spring
Spring文件配置以及获取
Spring文件配置以及获取
8 0
|
2天前
|
Java 数据库连接 数据库
Spring事务简介,事务角色,事务属性
Spring事务简介,事务角色,事务属性
14 2
|
7天前
|
Java 数据库连接 数据库
16:事务-Java Spring
16:事务-Java Spring
25 5
|
7天前
|
Java 微服务 Spring
Spring Boot中获取配置参数的几种方法
Spring Boot中获取配置参数的几种方法
20 2
|
8天前
|
消息中间件 Java 关系型数据库
Spring事务与分布式事务
这篇文档介绍了事务的概念和数据库事务的ACID特性:原子性、一致性、隔离性和持久性。在并发环境下,事务可能出现更新丢失、脏读和不可重复读等问题,这些问题通过设置事务隔离级别(如读未提交、读已提交、可重复读和序列化)来解决。Spring事务传播行为有七种模式,影响嵌套事务的执行方式。`@Transactional`注解用于管理事务,其属性包括传播行为、隔离级别、超时和只读等。最后提到了分布式事务,分为跨库和跨服务两种情况,跨服务的分布式事务通常通过最终一致性策略,如消息队列实现。
|
9天前
|
消息中间件 安全 Java
在Spring Bean中,如何通过Java配置类定义Bean?
【4月更文挑战第30天】在Spring Bean中,如何通过Java配置类定义Bean?
18 1
|
10天前
|
监控 Java 测试技术
Spring Boot与事务钩子函数:概念与实战
【4月更文挑战第29天】在复杂的业务逻辑中,事务管理是确保数据一致性和完整性的关键。Spring Boot提供了强大的事务管理机制,其中事务钩子函数(Transaction Hooks)允许开发者在事务的不同阶段插入自定义逻辑。本篇博客将详细探讨事务钩子函数的概念及其在Spring Boot中的应用。
30 1
|
10天前
|
Java 开发者 Spring
Spring Boot中的资源文件属性配置
【4月更文挑战第28天】在Spring Boot应用程序中,配置文件是管理应用程序行为的重要组成部分。资源文件属性配置允许开发者在不重新编译代码的情况下,对应用程序进行灵活地配置和调整。本篇博客将介绍Spring Boot中资源文件属性配置的基本概念,并通过实际示例展示如何利用这一功能。
22 1