您好,匿名用户
随意问技术百科期待您的加入

java SSH中 spring的事务是在什么时候提交的

+1 投票

我们项目当中一般在service层配置事务,但是一个Action中可能用到多个service来处理业务,那现在这些业务是在一个事务当中么?spring是怎样处理这样的事务的呢?求解

用户头像 提问 2013年 1月29日 @ Zeus 上等兵 (193 威望)
分享到:

1个回答

+1 投票
 
最佳答案

目前spring中事务用到比较多的三种方式:
1、通过AOP统一拦截事务,事务粒度最小只能控制到方法,一般针对不同的方法配置不同的事务策略。例如get*方法配置只读事务, add*或者update*方法配置REQUIRES_NEW等等;
2、通过注解的方式,在service层不同的方法上配置不同的事务策略,例如@Transactional(propagation=Propagation.REQUIRES_NEW);
3、硬编码事务处理,这种情形,事务粒度可以控制在语句级别;但缺点是事务与代码的耦合度比较高。

个人推荐第2种处理方式。spring的事务相关框架都在org.springframework.transaction包里面,其中事务的定义在类TransactionDefinition中,spring的代码写的比较简洁,很容易看懂,具体的你可以查看源代码,至于涉及到多个数据源的分布式事务,spring一般是通过jta的方式来处理的,具体的处理方法你也可以查看源代码,不过一般来说,分布式的事务用的不好容易出问题,尽量避免。

至于你所说的action中的多个service来处理业务,且都配置有事务,这个是否在同一个事务中,要看你事务策略中配置的事务传播规则,每个规则的含义具体见TransactionDefinition类。

PS:借用侯捷的一句话 —— 源码之前了无秘密

用户头像 回复 2013年 1月29日 @ Libra 上等兵 (351 威望)
选中 2013年 1月29日 @Zeus
提一个问题:

相关问题

+2 投票
1 回复 73 阅读
用户头像 提问 2012年 12月31日 @ Apollo 上等兵 (269 威望)
0 投票
0 回复 23 阅读
用户头像 提问 2013年 9月11日 @ Darius 上等兵 (331 威望)
0 投票
1 回复 37 阅读
用户头像 提问 2012年 12月1日 @ Rumble 上等兵 (394 威望)
0 投票
1 回复 38 阅读
用户头像 提问 2012年 12月1日 @ Urgot 上等兵 (262 威望)
0 投票
1 回复 34 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...