开发者社区> 问答> 正文

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

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

展开
收起
蛮大人123 2016-03-05 00:07:09 4147 0
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类。

    2019-07-17 18:52:48
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
相关产品:
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多