首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

有人真个测试过spring事务中readonly吗

2012-11-18 
有人真正测试过spring事务中readonly吗最新测试结果 start...:ahuaxuan 在回复中说的没错,在DataSourceUti

有人真正测试过spring事务中readonly吗

最新测试结果 start...:

ahuaxuan 在回复中说的没错,在DataSourceUtils.prepareConnectionForTransaction(con, definition)中的确会设置readonly,我之前说的DataSourceTransactionManager中不设置readonly的说法是错误的。
但在oracle下,这个readonly确实有问题,我一步步测下来,原因就是出在 con.setAutoCommit(false) 这行代码上:
1. 如果 con.setReadOnly(true) 放在 con.setAutoCommit(false) 前面,就是代码现在的做法,readonly是不起作用的。
2. 反之,如果我把DataSourceUtils.prepareConnectionForTransaction(con, definition)  代码放在它的后面的时候,readonly 起了作用。


难道oracle的驱动对这个顺序还有影响吗,有点匪夷所思啊。
不知道在其他数据库中有没有影响。



最新测试结果 end...


为何readonly不起作用,有人真正测过吗?

环境
1. spring2.5 + ibatis/jdbctemplate(测了这两个) + oracle10,
2. 驱动ojdbc14.jar
3. 连接池 dbcp和c3p0都测了。

先看部分后台,证明调用的方法确实开启了readonly:


 

所以即使是spring+jdbc还是会设置readonly的 14 楼 jayxu 2009-07-27   ahuaxuan 写道1.readonly语义不是所有的数据库驱动都支持的。
2.在spring+hibernate的条件下,readonly有一些优化
http://www.iteye.com/topic/95124
是的

有些数据库驱动不支持readonly的

像我就从来都没能用上readonly 15 楼 summeryhrb 2009-07-27   是通过数据库的事务控制实现的,spring只是把事务控制的参数传给jdbc而已。
关于测试的问题,完全可以通过多线程模拟出来,模拟测试+源码研究 16 楼 KimShen 2009-07-27   READ ONLY是需要底层数据库支持的! 至少MySQL中没有问题 17 楼 geng2483759 2009-08-06   ahuaxuan 说的没错,的确是设置了,但readonly还是不起作用,最新测试结果看我正文中的修改。 18 楼 gates_lee 2009-08-08   <ol>
<li>readonly并不是所有数据库都支持的,不同的数据库下会有不同的结果。</li>
<li>设置了readonly后,connection都会被赋予readonly,效果取决于数据库的实现。</li>
<li>在ORM中,设置了readonly会赋予一些额外的优化,例如在Hibernate中,会被禁止flush等。</li>
</ol> 19 楼 geng2483759 2009-08-08   <div class="quote_title">gates_lee 写道</div>
<div class="quote_div"><ol>
<li>readonly并不是所有数据库都支持的,不同的数据库下会有不同的结果。</li>
<li>设置了readonly后,connection都会被赋予readonly,效果取决于数据库的实现。</li>
<li>在ORM中,设置了readonly会赋予一些额外的优化,例如在Hibernate中,会被禁止flush等。</li>
</ol></div>
<p>oracle在odbc14的jar下是绝对支持readonly的,这点吾容置疑。但为何会出现我文中所说的现象,这才是本质问题。</p> 20 楼 panny1982 2009-10-19   你如果纯用了jdbc那是肯定有效果的,但如果用了Ibatis,Hibernate的第三方,那么往往readonly会被忽略,其实如果你是纯粹取数据,不声明事务也没关系。

热点排行