开发者社区> 问答> 正文

使用spring aop管理事务

请教大家:dao层也就是数据库操作异常由上层处理,dao层不处理异常。使用spring aop管理事务,对service层进行代理,异常就回滚,然后数据库异常集中到controller中处理 ,这样理解对吗

展开
收起
a123456678 2016-03-19 10:04:59 2654 0
2 条回答
写回答
取消 提交回答
  • 这个问题首先涉及到工程中代码结构的问题,正常来说会分成以下四层, 从低向上依次是:
    dao层: 存放的是对底层数据库的操作
    service层: 对底层的封装, 比如对dao层的封装, 对外围接口的封装等
    biz层: 即业务层, 该层存放的是业务逻辑类
    controller层: 及入口层, 该层负责对请求参数进行校验, 调用biz层处理业务逻辑, 然后对结果进行组装。

    弄清楚了代码结构后再说一下异常处理原则: 能处理就早处理
    基于楼主的例子, db异常应该是在service层被spring aop事务管理器捕获了, 即就是说@Transactional应该放在service层的方法上。另外, 一旦回滚事务管理器还会抛出数据库回滚异常, 接着biz层就要捕获这个异常来判定db操作是否成功,进而执行不同的逻辑处理。

    2019-07-17 19:07:27
    赞同 展开评论 打赏
  • spring 的回滚触发条件就是异常,dao也好,service也好,只要抛出了异常,就抛给controller层捕获处理1.确定什么异常需要回滚 -> DB插入失败(违背约束等) 一般都需要回滚 -> 业务异常 可以自己决定是否回滚,抛出不同类型的异常

    2.确定回滚的边界,你一个操作的失败需要回滚多少对DB的操作,这个和你代码的结构有关,如果你业务全集中在Controller,就可能需要把边界加载到C层,否则可以考虑加载到S层,甚至你可以考虑加载到一个S层下方的Support层

    2019-07-17 19:07:27
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

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

相关实验场景

更多