为什么我们不应该@Transactional制作Spring MVC控制器?
关于这个话题已经有几个问题,但是根本没有任何回应真正提供论据来解释为什么我们不应该制作Spring MVC控制器 。看:Transactional
那么,为什么呢?
- 是否存在无法克服的技术问题?
- 是否存在体系结构问题?
- 是否存在性能/死锁/并发问题?
- 有时是否需要多个单独的事务?如果是,有哪些用例?(我喜欢简化的设计,对服务器的调用要么完全成功,要么完全失败。这听起来像是一个非常稳定的行为)
背景:几年前,我在一个团队中工作,开发了一个相当大的ERP软件,该软件在C#/NHibernate/Spring.Net中实现。到服务器的往返行程就是这样实现的:事务在进入任何控制器逻辑之前打开,并在退出控制器后提交或回滚。交易在框架中进行管理,因此没有人需要关心它。这是一个出色的解决方案:稳定,简单,只有少数架构师必须关心交易问题,团队的其他成员只是实现了功能。
从我的角度来看,这是我见过的最好的设计。当我试图用Spring MVC重现相同的设计时,我陷入了一场噩梦,有延迟加载和事务问题,每次都有相同的答案:不要让控制器成为事务性的,但为什么?
提前感谢您的回答!