- 浏览: 2652200 次
- 来自: 杭州
文章分类
- 全部博客 (1188)
- webwork (4)
- 网摘 (18)
- java (103)
- hibernate (1)
- Linux (85)
- 职业发展 (1)
- activeMQ (2)
- netty (14)
- svn (1)
- webx3 (12)
- mysql (81)
- css (1)
- HTML (6)
- apache (3)
- 测试 (2)
- javascript (1)
- 储存 (1)
- jvm (5)
- code (13)
- 多线程 (12)
- Spring (18)
- webxs (2)
- python (119)
- duitang (0)
- mongo (3)
- nosql (4)
- tomcat (4)
- memcached (20)
- 算法 (28)
- django (28)
- shell (1)
- 工作总结 (5)
- solr (42)
- beansdb (6)
- nginx (3)
- 性能 (30)
- 数据推荐 (1)
- maven (8)
- tonado (1)
- uwsgi (5)
- hessian (4)
- ibatis (3)
- Security (2)
- HTPP (1)
- gevent (6)
- 读书笔记 (1)
- Maxent (2)
- mogo (0)
- thread (3)
- 架构 (5)
- NIO (5)
- 正则 (1)
- lucene (5)
- feed (4)
- redis (17)
- TCP (6)
- test (0)
- python,code (1)
- PIL (3)
- guava (2)
- jython (4)
- httpclient (2)
- cache (3)
- signal (1)
- dubbo (7)
- HTTP (4)
- json (3)
- java socket (1)
- io (2)
- socket (22)
- hash (2)
- Cassandra (1)
- 分布式文件系统 (5)
- Dynamo (2)
- gc (8)
- scp (1)
- rsync (1)
- mecached (0)
- mongoDB (29)
- Thrift (1)
- scribe (2)
- 服务化 (3)
- 问题 (83)
- mat (1)
- classloader (2)
- javaBean (1)
- 文档集合 (27)
- 消息队列 (3)
- nginx,文档集合 (1)
- dboss (12)
- libevent (1)
- 读书 (0)
- 数学 (3)
- 流程 (0)
- HBase (34)
- 自动化测试 (1)
- ubuntu (2)
- 并发 (1)
- sping (1)
- 图形 (1)
- freemarker (1)
- jdbc (3)
- dbcp (0)
- sharding (1)
- 性能测试 (1)
- 设计模式 (2)
- unicode (1)
- OceanBase (3)
- jmagick (1)
- gunicorn (1)
- url (1)
- form (1)
- 安全 (2)
- nlp (8)
- libmemcached (1)
- 规则引擎 (1)
- awk (2)
- 服务器 (1)
- snmpd (1)
- btrace (1)
- 代码 (1)
- cygwin (1)
- mahout (3)
- 电子书 (1)
- 机器学习 (5)
- 数据挖掘 (1)
- nltk (6)
- pool (1)
- log4j (2)
- 总结 (11)
- c++ (1)
- java源代码 (1)
- ocr (1)
- 基础算法 (3)
- SA (1)
- 笔记 (1)
- ml (4)
- zokeeper (0)
- jms (1)
- zookeeper (5)
- zkclient (1)
- hadoop (13)
- mq (2)
- git (9)
- 问题,io (1)
- storm (11)
- zk (1)
- 性能优化 (2)
- example (1)
- tmux (1)
- 环境 (2)
- kyro (1)
- 日志系统 (3)
- hdfs (2)
- python_socket (2)
- date (2)
- elasticsearch (1)
- jetty (1)
- 树 (1)
- 汽车 (1)
- mdrill (1)
- 车 (1)
- 日志 (1)
- web (1)
- 编译原理 (1)
- 信息检索 (1)
- 性能,linux (1)
- spam (1)
- 序列化 (1)
- fabric (2)
- guice (1)
- disruptor (1)
- executor (1)
- logback (2)
- 开源 (1)
- 设计 (1)
- 监控 (3)
- english (1)
- 问题记录 (1)
- Bitmap (1)
- 云计算 (1)
- 问题排查 (1)
- highchat (1)
- mac (3)
- docker (1)
- jdk (1)
- 表达式 (1)
- 网络 (1)
- 时间管理 (1)
- 时间序列 (1)
- OLAP (1)
- Big Table (0)
- sql (1)
- kafka (1)
- md5 (1)
- springboot (1)
- spring security (1)
- Spring Boot (3)
- mybatis (1)
- java8 (1)
- 分布式事务 (1)
- 限流 (1)
- Shadowsocks (0)
- 2018 (1)
- 服务治理 (1)
- 设计原则 (1)
- log (0)
- perftools (1)
最新评论
-
siphlina:
课程——基于Python数据分析与机器学习案例实战教程分享网盘 ...
Python机器学习库 -
san_yun:
leibnitz 写道hi,我想知道,无论在92还是94版本, ...
hbase的行锁与多版本并发控制(MVCC) -
leibnitz:
hi,我想知道,无论在92还是94版本,更新时(如Puts)都 ...
hbase的行锁与多版本并发控制(MVCC) -
107x:
不错,谢谢!
Latent Semantic Analysis(LSA/ LSI)算法简介 -
107x:
不错,谢谢!
Python机器学习库
学习spring常常听说只读事务,到底什么是只读事务?
“只读事务”的提法太过笼统.只读事务可以分为两个方面:JDBC和数据库。
JDBC的Connection对象有一个方法setReadOnly。JDK的API描述如下:
翻译过来的意思“把此连接设置为只读模式,作为的数据库优化的暗示”.这里面有事务隔离吗?没有。甚至SUN的描述都很模糊,只是向数据库驱动做一个启动数据库优化的暗示,不代表一定有效。所以不应该把readOnly作为打开只读事务的判断。
robbin 在只读查询是否需要启动事务管理,兼论只读事务的说法并不十分正确:
在JDBC中,指定只读事务的办法为:
connection.setReadOnly(true);
在Hibernate中,指定只读事务的办法为:
session.setFlushMode(FlushMode.NEVER);
此时,Hibernate也会为只读事务提供Session方面的一些优化手段
在Spring的Hibernate封装中,指定只读事务的办法为:
bean配置文件中,prop属性增加“readOnly”
查看oracle的文档对jdbc驱动的描述:
Oracle服务器支持Read-only ,这个又是什么意思呢?
为了搞清楚这个所谓的“只读事务”必须先明确一个概念--“事务隔离级别(transaction isolation degree)”,ANSI标准定义了4个隔离级别标准:
主流数据库的一般的默认是READ COMMITTED级别。
MYSQL和MS SQLServer遵守了这个定义而oracle没有。oracle只有三种事务隔离等级:
前两个Read committed,Serializable 和ANSI的定义是一致的,来看看最关键的第三个Read-only 。Read-only事务只会看到在这个事务开启时间点其他事务提交过的数据,并且不允许执行INSERT, UPDATE,DELETE语句,换句话说,在设置set transaction read only后,当前会话所见的数据图像,将不再受到其他会话事务的影响。
所以oracle支持的只读事务不是为了优化性能,而是为了让这个事务中所有的查询操作看到的数据是一个时间点(开启事务)上的一致数据。MYSQL,SQL_SERVER根本没有只读事务的概念,但是有REPEATABLE READ,具体看之间的差别。
有了这个基础后,再看Connection对象也定义了五个变量和ANSI标准对应:
而Spring也不过是在这上面做封装。TransactionDefinition接口中定义了五个不同的事务隔离级别:
既然没有只读事务的概念,那么提交一个查询是否需要开启一个事务呢?
不同的数据库可能有不同实现,oracle驱动的文档介绍:
如果关闭Disabling Auto-Commit Mode可以提高一定的性能。
但是MYSQL好像相反,参见:http://www.iteye.com/topic/1603?page=1
“只读事务”的提法太过笼统.只读事务可以分为两个方面:JDBC和数据库。
JDBC的Connection对象有一个方法setReadOnly。JDK的API描述如下:
Puts this connection in read-only mode as a hint to thedriver to enable database optimizations.
翻译过来的意思“把此连接设置为只读模式,作为的数据库优化的暗示”.这里面有事务隔离吗?没有。甚至SUN的描述都很模糊,只是向数据库驱动做一个启动数据库优化的暗示,不代表一定有效。所以不应该把readOnly作为打开只读事务的判断。
robbin 在只读查询是否需要启动事务管理,兼论只读事务的说法并不十分正确:
robbin 写道
在JDBC中,指定只读事务的办法为:
connection.setReadOnly(true);
在Hibernate中,指定只读事务的办法为:
session.setFlushMode(FlushMode.NEVER);
此时,Hibernate也会为只读事务提供Session方面的一些优化手段
在Spring的Hibernate封装中,指定只读事务的办法为:
bean配置文件中,prop属性增加“readOnly”
查看oracle的文档对jdbc驱动的描述:
Transaction Isolation Levels and Access Modes Read-only connections are supported by the Oracle server, but not by the Oracle JDBC drivers.
Oracle服务器支持Read-only ,这个又是什么意思呢?
为了搞清楚这个所谓的“只读事务”必须先明确一个概念--“事务隔离级别(transaction isolation degree)”,ANSI标准定义了4个隔离级别标准:
- READ UNCOMMITTED:最低级别的隔离,通常又称为dirty read,它允许一个事务读取还没commit的数据,这样可能会提高性能,但是dirty read可能不是我们想要的。
- READ COMMITTED:在一个事务中只允许已经commit的记录可见。如果session中select还在查询中,另一session此时insert一条记录,当前事务可以看到修改的记录,从而产生不可重复读取和幻像数据。
- REPEATABLE READ:在一个事务开始后,其他session对数据库的修改在本事务中不可见,直到本事务commit或rollback。在一个事务中重复select的结果一样,除非本事务中update数据库。
- SERIALIZABLE:最高级别的隔离,只允许事务串行执行。为了达到此目的,数据库会锁住每行已经读取的记录,其他session不能修改数据直到前一事务结束,事务commit或取消时才释放锁。
主流数据库的一般的默认是READ COMMITTED级别。
MYSQL和MS SQLServer遵守了这个定义而oracle没有。oracle只有三种事务隔离等级:
- Read committed
- Serializable
- Read-only Read-only transactions see only those changes that were committed at the time the transaction began and do not allow INSERT, UPDATE, and DELETE statements
前两个Read committed,Serializable 和ANSI的定义是一致的,来看看最关键的第三个Read-only 。Read-only事务只会看到在这个事务开启时间点其他事务提交过的数据,并且不允许执行INSERT, UPDATE,DELETE语句,换句话说,在设置set transaction read only后,当前会话所见的数据图像,将不再受到其他会话事务的影响。
所以oracle支持的只读事务不是为了优化性能,而是为了让这个事务中所有的查询操作看到的数据是一个时间点(开启事务)上的一致数据。MYSQL,SQL_SERVER根本没有只读事务的概念,但是有REPEATABLE READ,具体看之间的差别。
有了这个基础后,再看Connection对象也定义了五个变量和ANSI标准对应:
int TRANSACTION_NONE =0; //不受支持的事务 int TRANSACTION_READ_COMMITTED =1; int TRANSACTION_READ_UNCOMMITTED = 2; int TRANSACTION_REPEATABLE_READ = 4; int TRANSACTION_SERIALIZABLE =8;
而Spring也不过是在这上面做封装。TransactionDefinition接口中定义了五个不同的事务隔离级别:
int ISOLATION_DEFAULT = -1; int ISOLATION_READ_UNCOMMITTED = Connection.TRANSACTION_READ_UNCOMMITTED; int ISOLATION_READ_COMMITTED = Connection.TRANSACTION_READ_COMMITTED; int ISOLATION_REPEATABLE_READ = Connection.TRANSACTION_REPEATABLE_READ; int ISOLATION_SERIALIZABLE = Connection.TRANSACTION_SERIALIZABLE;
既然没有只读事务的概念,那么提交一个查询是否需要开启一个事务呢?
不同的数据库可能有不同实现,oracle驱动的文档介绍:
如果关闭Disabling Auto-Commit Mode可以提高一定的性能。
但是MYSQL好像相反,参见:http://www.iteye.com/topic/1603?page=1
发表评论
-
Raft
2018-07-12 14:20 733前言 上篇文章说解决问题要分而治之,先把分片的问题解决了再 ... -
java uuid
2017-09-14 18:18 555在java中产生uuid的方式是使用java.util.UU ... -
JAVA 编码规范
2017-09-06 11:34 406https://google.github.io/style ... -
mac 入门
2015-12-01 16:28 622http://foocoder.com/blog/wo-zai ... -
java 反编译工具gad
2014-05-09 12:04 962java 反编译工具gad,备个份。 -
java 代码大全(code book)
2014-04-29 10:59 1058参考这里: http://www.java2s.com/C ... -
SQL语法解析器JSQLParser
2014-02-09 19:53 2138SQL 语法解释器jsqlparser 是用java ... -
BufferedInputStream 深入研究。
2013-11-19 13:26 14181. BufferedInputStream的基本原理 ... -
java 启动脚本
2013-08-22 19:08 976java 启动脚本 #!/bin/bash cmd=&q ... -
CRLF escape
2013-08-06 17:51 1192最近需要对用户输入的CRLF即(\r\n)做escape, ... -
安全的自增类
2013-07-22 18:16 982java中一个计数器如果超过MAX_VALUE再自增会如何? ... -
solr日志被block的问题
2013-05-23 16:48 1254"catalina-exec-22386" ... -
beanMapper
2013-01-13 22:43 884实在被一堆get,set搞烦了,周末写了一个beanMappe ... -
java instanceof ,isInstance(),isAssignableFrom之前的差异
2013-01-06 11:00 957public class ItemQuery { ... -
通过gzip对字符串压缩
2012-12-22 18:10 3101通过GZIPOutputStream,GZIPInputStr ... -
关于URL编码
2012-12-21 14:18 1102一、问题的由来 URL就是网址,只要上网,就一定会用到。 ... -
spring的FactoryBean机制
2012-11-20 16:18 1221spring可以通过的FactoryBean的形式把一个Fac ... -
HashMap cpu占用 100%
2012-11-10 22:22 1805今天在重现出HashMap cpu占用100%了,只 ... -
文字扫描工具--java.util.Scanner
2012-11-10 14:33 1091A simple text scanner which c ... -
一个隐形的java int溢出
2012-11-06 22:17 1103故事的背景: 笔者最近在做一个类SNS的项目, ...
相关推荐
只读模式(READ ONLY)允许用户读取数据库中的数据,但不允许任何写入操作,包括DML(如INSERT、UPDATE、DELETE)和DDL(如CREATE TABLESPACE、ALTER DATABASE ADD LOGFILE等)操作。此模式主要用于保护数据库免受...
例如,对于只读操作,你可以设置`PROPAGATION_REQUIRED,readOnly`,这样所有以特定前缀(如`find*`、`get*`等)的方法都会在一个只读事务中执行。这种方式减少了重复配置,提高了效率。 3. **事务传播行为** - `...
注解中可以包含多个属性,如`value`(指定事务管理器)、`propagation`(事务传播行为)、`isolation`(事务隔离级别)、`readOnly`(是否只读事务)等,以定制事务的行为。 3. **事务传播行为** 事务传播行为定义...
- 只读事务:通过设置事务为只读模式,可以提高事务的性能,尤其是对于那些只进行数据读取操作的事务。 - 超时设置:可以为事务设置一个最大执行时间,超过时间则自动回滚事务。 总之,Spring事务框架提供了一套...
同时,Spring还提供了其他的事务注解,如@Transactional(readOnly = true)来标记只读事务,以及@Transactional(noRollbackFor = Exception.class)来指定哪些异常不触发回滚。 总结来说,Spring的事务管理提供了多种...
首先,Spring的事务管理分为两种模式:编程式事务管理和声明式事务管理。编程式事务管理通过`PlatformTransactionManager`接口及其实现类(如`DataSourceTransactionManager`)进行手动控制,而声明式事务管理则更加...
只读事务不会进行回滚,适合只查询不修改数据的操作。 选择最合适的事务管理方式取决于项目的规模、复杂性和团队的技术栈。小型项目或快速原型开发中,编程式事务管理可能更合适;对于大部分企业级应用,声明式事务...
注解中的属性包括`propagation`(事务传播行为)、`isolation`(隔离级别)、`readOnly`(只读事务)、`timeout`(超时时间)和`rollbackFor`(触发回滚的异常类型)等。 2. 事务传播行为(Propagation): Spring...
TransactionDefinition接口定义了事务的规则,包括事务的名称、隔离级别、传播行为和超时时间,以及是否为只读事务。这些属性对事务的行为有直接影响: - `getName()`:返回事务的唯一标识。 - `...
1. **TransactionDefinition**: 定义了事务的属性,如隔离级别、传播行为、读写模式、超时时间以及是否为只读事务。 2. **PlatformTransactionManager**: 这是Spring事务管理的顶级接口,提供了开始、提交、回滚...
- `readOnly`: 是否为只读事务,如果设置为`true`,则事务管理器会尽可能地优化只读事务,例如在某些数据库中禁用写锁定。 - `rollbackFor`和`noRollbackFor`: 分别指定发生哪些异常时应回滚和不应回滚事务。 3. ...
接下来,我们需要定义事务通知,包括定义方法的过滤规则,所有方法都使用事务,并且定义所有 get 开头的方法都是只读的。 最后,我们需要定义 AOP 配置,包括定义一个切入点,定义事务的通知,进行适配。 基于 @...
可以设置属性如`propagation`(事务传播行为)、`isolation`(隔离级别)、`readOnly`(只读事务)、`timeout`(事务超时时间)等。例如: ```java @Service public class BankAccountService { @Transactional ...
接着,`TransactionDefinition`接口是事务的定义信息,它包含了事务的隔离级别、传播行为、超时设置以及是否为只读事务。隔离级别是防止并发事务之间数据冲突的重要手段,常见的隔离级别有READ_UNCOMMITTED、READ_...
在Spring框架中,声明式事务管理是实现事务处理的一种高效且灵活的方式,它允许开发者通过在服务层方法上添加特定的注解来控制事务的边界,而无需编写大量的事务管理代码。这种方式使得业务逻辑和事务控制得以分离,...
总结,SSM框架下的事务管理,无论是注解方式还是XML配置方式,都旨在简化事务处理,提高代码的可读性和可维护性。理解并熟练掌握这些事务管理方式,对于提升Java Web应用的稳定性和可靠性至关重要。通过...
此注解可以包含各种事务属性,如isolation(隔离级别)、propagation(传播行为)、timeout(超时时间)和readOnly(只读事务)。 在Spring中,事务传播行为有七种,包括REQUIRED、SUPPORTS、MANDATORY、REQUIRES_...
1. **TransactionDefinition**: 这个接口定义了事务的属性,如隔离级别、事务超时时间、是否只读等。通过TransactionDefinition,我们可以定制事务的行为。 2. **TransactionStatus**: 提供了事务的状态信息,如...
事务管理器可以根据此标志进行优化,例如对只读事务不进行锁定,提高性能。在只读事务中,数据库的修改操作将被禁止。 通过配置这些事务属性,我们可以精确地控制Spring声明式事务的行为,以满足不同业务场景的需求...