概念:从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见!(查询中不会出现别人在时间点a之后提交的数据)
应用场合:
如果你一次执行单条查询语句,则没有必要启用事务支持,数据库默认支持SQL执行期间的读一致性;
如果你一次执行多条查询语句,例如统计查询,报表查询,在这种场景下,多条查询SQL必须保证整体的读一致性,否则,在前条SQL查询之后,后条SQL查询之前,数据被其他用户改变,则该次整体的统计查询将会出现读数据不一致的状态,此时,应该启用事务支持。
【注意是一次执行多次查询来统计某些信息,这时为了保证数据整体的一致性,要用只读事务】
怎样设置:
对于只读查询,可以指定事务类型为readonly,即只读事务。
由于只读事务不存在数据的修改,因此数据库将会为只读事务提供一些优化手段,例如Oracle对于只读事务,不启动回滚段,不记录回滚log。
(1)在JDBC中,指定只读事务的办法为: connection.setReadOnly(true);
(2)在Hibernate中,指定只读事务的办法为: session.setFlushMode(FlushMode.NEVER);
此时,Hibernate也会为只读事务提供Session方面的一些优化手段
(3)在Spring的Hibernate封装中,指定只读事务的办法为: bean配置文件中,prop属性增加“readOnly”
或者用注解方式@Transactional(readOnly=true)
【 if the transaction is marked as read-only, Spring will set the Hibernate Session’s flush mode to FLUSH_NEVER,
and will set the JDBC transaction to read-only】也就是说在Spring中设置只读事务是利用上面两种方式
在将事务设置成只读后,相当于将数据库设置成只读数据库,此时若要进行写的操作,会出现错误
相关推荐
- 考虑使用`@Transactional(readOnly = true)`来标记只读事务,这样Spring可以优化事务处理,比如跳过回滚操作。 通过理解并熟练运用`@Transactional`注解,开发者可以更方便地管理和控制Spring应用中的事务,确保...
7. **readOnly 设置**:当readOnly设置为true时,事务被标记为只读,这可能导致某些数据库操作(如更新、删除)不被允许。 8. **异常类型**:默认情况下,只有运行时异常会触发事务回滚。如果抛出的是检查异常...
* readOnly:指定事务是否为只读事务,默认值为false。 * rollbackFor:用于指定能够触发事务回滚的异常类型。 例如: ```java @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation....
3. 只读事务:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true) 只读标志只在事务启动时应用,否则即使配置也会被忽略。 二、事务传播模式 在 @Transactional 注解中,Propagation 枚举了...
其中项目里面的配置文件或是代码每行都有注释,网上这种整合实例很少,就奉献出来大家一起学习吧,在整合过程中遇到一个很奇怪的问题,就是spring的事务我配置成@Transactional(readOnly = true)只读事务,但是还...
4. **其他事务属性**:除了`@Transactional`,Spring还提供了其他事务相关的注解,如`@Transactional(readOnly = true)`用于标记只读事务,提高性能;`@RollbackFor`和`@NoRollbackFor`用于控制哪些异常类型需要触发...
同时,Spring还提供了其他的事务注解,如@Transactional(readOnly = true)来标记只读事务,以及@Transactional(noRollbackFor = Exception.class)来指定哪些异常不触发回滚。 总结来说,Spring的事务管理提供了多种...
这里的`readOnly`属性表示是否只读事务,`propagation`属性定义了事务的传播行为,如REQUIRED(默认,如果有事务就加入,没有就新建)、REQUIRES_NEW(总是新建事务)等。 4. 事务异常处理 当事务中发生未检查异常...
`@Transactional`注解有多个属性,包括`propagation`(传播行为)、`isolation`(隔离级别)、`readOnly`(只读事务)、`timeout`(超时时间)和`rollbackFor`(指定触发回滚的异常类型)。例如: ```java @...
通过设置`@Transactional`的`readOnly`属性为`true`,可以标记一个事务为只读。这通常用于提高性能,因为只读事务不需要记录回滚信息。不过,这并不意味着在只读事务中不能执行更新操作,只是提示Spring可以优化事务...
@Transactional(readOnly = true) public class UserService { @Autowired private UserRepository userRepository; @Transactional(propagation = Propagation.REQUIRES_NEW) public void updateUser(User ...
4. **只读事务(ReadOnly)**: - 当设置为`true`时,标记事务为只读。这只是一个提示,不保证所有的事务管理系统都能完全支持。即使设置为只读,事务仍可能进行写操作,但某些系统可能会利用这个信息优化事务处理...
4. **只读事务(readOnly)**:设置事务为只读可以优化数据库性能,因为数据库可以对只读事务进行某些优化。在Spring中,可以设置`readOnly=true`,告知事务管理器该事务不需要修改数据。 接下来,我们看看两种事务...
当设置为`readOnly=true`时,Spring会尝试优化事务处理,比如在某些数据库中禁用写锁。这对于只读查询来说可以提高性能。 5. 回滚规则(RollbackFor): 通过`rollbackFor`属性,我们可以指定哪些异常类型会导致...
readonly属性主要用于声明一个事务是否为只读事务。在只读事务中,数据库可能会对事务进行优化,例如跳过写日志等步骤,提高效率。当设置为true时,Spring不会提交任何更新操作,仅允许查询操作。这有助于避免在不...
- `readOnly`属性:可以设置`@Transactional(readOnly=true)`,使事务只读,优化数据库性能。 - `rollbackFor`和`noRollbackFor`属性:通过指定异常类型,可以控制哪些异常发生时需要回滚事务,哪些异常发生时不回滚...
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED, timeout = 60, readOnly = true) public void myTransactionalMethod() { // 方法体 } ``` 综上所述,Spring的声明式...
- 设置`readOnly=true`,表明事务是只读的,这有助于数据库优化读操作。 5. **事务异常回滚** - 默认情况下,如果方法中抛出未检查异常(继承自`RuntimeException`的异常)或`Error`,事务将自动回滚。 - 如果...
- `readOnly`: 是否为只读事务,如果设置为`true`,则事务管理器会尽可能地优化只读事务,例如在某些数据库中禁用写锁定。 - `rollbackFor`和`noRollbackFor`: 分别指定发生哪些异常时应回滚和不应回滚事务。 3. ...