`
zhouchaofei2010
  • 浏览: 1097442 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring read-only="true" 只读事务的一些概念

 
阅读更多

概念:从这一点设置的时间点开始(时间点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中设置只读事务是利用上面两种方式

 

在将事务设置成只读后,相当于将数据库设置成只读数据库,此时若要进行写的操作,会出现错误

 

 

 转自: http://blog.csdn.net/MageShuai/article/details/4544191

分享到:
评论

相关推荐

    spring_声明式事务_xml事务的书写.zip

    `txAdvice`定义了具体的事务策略,如`propagation`属性决定了事务的传播行为,`rollback-for`指定了触发回滚的异常类型,`read-only`表示只读事务。 `<tx:method>`元素中的`name`属性用于匹配方法名,星号`*`代表...

    Spring3配置声明式事务

    <tx:method name="*" read-only="true"/> ``` 在此示例中,`add*`, `del*`, 和 `modify*` 方法将使用REQUIRED传播行为,而其他方法默认为只读事务。 ##### 4. 应用事务切面 最后,通过`<aop:config>`和`...

    Spring2.0 事务处理

    `tx:advice`定义了事务属性,如传播行为(`propagation`)、是否回滚(`rollback-for`)以及是否只读(`read-only`)。 `@Transactional`注解可以用于控制事务边界,例如: ```java @Service public class ...

    Spring使用XML配置声明式事务

    <tx:method name="*" read-only="true"/> ``` 这里的配置意味着,以"save"、"update"或"delete"开头的方法会启动一个新的事务,并在遇到异常时回滚;而其他方法默认标记为只读事务,不进行任何写操作。 然后,...

    spring学习笔记事务的

    ### Spring框架中的事务管理 #### 一、Spring事务概述 在Spring框架中,事务管理是一项重要的功能,它能够确保业务操作的一致性和完整性。Spring提供了两种类型的事务管理:编程式事务管理和声明式事务管理。 - *...

    使用Spring的声明式事务----Annotation注解方式

    当设置为`readOnly=true`时,Spring会尝试优化事务处理,比如在某些数据库中禁用写锁。这对于只读查询来说可以提高性能。 5. 回滚规则(RollbackFor): 通过`rollbackFor`属性,我们可以指定哪些异常类型会导致...

    Spring相关测试3

    事务管理涉及到四个关键概念:传播行为、隔离级别、回滚规则和只读事务,以及两种常见的配置方式:基于注解和基于XML。 首先,我们来详细了解一下事务属性: 1. **传播行为(propagation)**:在Spring中,事务的...

    spring与mybatis整合配置文档

    <tx:method name="find*" read-only="true"/> <tx:method name="get*" read-only="true"/> <tx:method name="update*"/> <tx:method name="delete*"/> <tx:method name="insert*"/> ``` 这些配置确保了所有带有`...

    Spring学习笔记(17)----使用Spring注解方式管理事务

    隔离级别是数据库层面的概念,Spring允许你在`@Transactional`中设置,常见的有`ISOLATION_DEFAULT`、`ISOLATION_READ_UNCOMMITTED`、`ISOLATION_READ_COMMITTED`、`ISOLATION_REPEATABLE_READ`和`ISOLATION_...

    Spring总体曲线图

    <tx:method name="get*" read-only="true" /> <!-- 增删改操作需要添加事务 --> <tx:method name="insert*" propagation="REQUIRED" /> <!-- 配置事务拦截器 --> <aop:advisor advice-ref="txAdvice" ...

    J2EE SSH事务配置

    - 对于其他所有方法,采用`SUPPORTS`传播行为,并设置`read-only`属性为`true`,这意味着这些方法支持当前事务,但如果不存在则不创建新事务,并且认为这些方法是只读操作。 ##### 3. AOP配置 最后,使用AOP配置将...

    Spring.html

    事务的一些状态 整合 Spring整合Junit 1.导入依赖spring-test 2.加注解:RunWith、ContextConfiguration 3.注入对象进行测试 Spring整合web 1.导入依赖spring-web 2.配置ContextLoadListener 3....

    Spring+iBatis整合详解

    <tx:method name="*" read-only="true"/> <!-- AOP切面配置 --> <aop:pointcut id="allManagerMethod" expression="execution(* com.ibatis.manager.*.*(..))"/> <aop:advisor advice-ref="txAdvice" ...

    Spring事务类型祥解

    - `readOnly`: 是否为只读事务,如果设置为`true`,则事务管理器会尽可能地优化只读事务,例如在某些数据库中禁用写锁定。 - `rollbackFor`和`noRollbackFor`: 分别指定发生哪些异常时应回滚和不应回滚事务。 3. ...

    Spring3事务管理——使用@Transactional 注解.rar

    - 考虑使用`@Transactional(readOnly = true)`来标记只读事务,这样Spring可以优化事务处理,比如跳过回滚操作。 通过理解并熟练运用`@Transactional`注解,开发者可以更方便地管理和控制Spring应用中的事务,确保...

    spring注解事务实现demo

    通过设置`@Transactional`的`readOnly`属性为`true`,可以标记一个事务为只读。这通常用于提高性能,因为只读事务不需要记录回滚信息。不过,这并不意味着在只读事务中不能执行更新操作,只是提示Spring可以优化事务...

    Spring中的事务管理

    在Spring框架中,事务管理是实现业务逻辑时不可或缺的一部分,它确保了数据的一致性和完整性。Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。本篇文章将重点探讨基于注解和XML配置的声明式...

    北大青鸟Spring配置信息

    例如,“add*”、“delete*”、“modify*”和“search*”方法将被标记为必须在一个新事务中执行(`propagation="REQUIRED"`),而其他未命名的方法默认为只读(`read-only="true"`)且支持现有事务(`propagation=...

    applicationContext-trans.xml

    <tx:method name="get*" propagation="SUPPORTS" read-only="true"/> ``` 这段配置表示所有以`save`、`insert`等开头的方法将采用`REQUIRED`传播行为,而以`get`开头的方法将采用`SUPPORTS`传播行为,并且这些...

Global site tag (gtag.js) - Google Analytics