锁定老帖子 主题:spring事务嵌套的疑惑
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2014-03-27
xoyozo123 写道 我怀疑mysql事务隔离级别实际是read-uncommited,既然你已经手动设置隔离级别为read-commited。那我也不知道原因是啥。
我开始也是怀疑是数据库默认隔离级别不同。所以就测试了。 1 在spring中统一配置隔离级别:无效 2 把数据库中的隔离级别重新设置:无效(因为oracle就3级隔离级别,我就把mysql中的设置为read-commited。甚至设置为序列化的操作。任然有效.) |
|
返回顶楼 | |
发表时间:2014-03-28
lvwenwen 写道 iq527 写道 @jinnianshilongnian 请高手
+1 高手呢? |
|
返回顶楼 | |
发表时间:2014-03-28
xoyozo123 写道 你是通过this而调用updateService1,updateService2,不是通过spring的代理对象。不管你怎么改,他们俩用的还是updateService里启的事务。要让updateService1,updateService2定义的事务生效。可以通过 AopContext.currentProxy()获取代理对象,然后调用代理对象的方法。或者将updateService1,updateService2方法抽取到另外一个类里面。
按照兄弟说的方法测试了。 没有去获取proxy,感觉这种方法会破坏spring的封装。 把子方法放到其他service中,调用(设置Propagation->REQUIRES_NEW)。可以更新。 开始没有用这种的原因是:感觉在service中调用另一个service中的方法,不怎么好。 anyway,问题找到了。by the way, 大家在层次调用的时候,有没有遵循什么规则。 我自己是觉得:同级不要互相调用,上级调用下级。 |
|
返回顶楼 | |
发表时间:2014-03-28
xoyozo123 正解, spring的事务增强是通过动态代理来实现的, runtime, 除非使用aspectj之类的编译期增强框架, 在编译的时候就植入事务代码.
ps: 既然事务界定以service为边界, 尽量保持service的纯洁性, 但是这样为导致的大量代码重复的的肥service层, 考虑到后期维护, 可以参考ddd, 将业务逻辑代码抽象成领域对象, service负责组织领域对象 |
|
返回顶楼 | |
发表时间:2014-03-28
|
|
返回顶楼 | |
发表时间:2014-03-28
public void method(){
System.out.println("fdfd"); } |
|
返回顶楼 | |
发表时间:2014-03-28
liqiaomu410 写道 public void method(){
System.out.println("fdfd"); } 兄弟,你是猴子派来的? |
|
返回顶楼 | |
发表时间:2014-03-28
|
|
返回顶楼 | |
发表时间:2014-03-28
结贴 多谢大家。特别感谢 @xoyozo123 @lvwenwen @iq527 @jinnianshilongnian
|
|
返回顶楼 | |