我们使用@Transactional注释来定义事务,或者使用défine事务来定义事务。 我们还用于定义服务上的事务或特定于其方法的事务。
最近,一位同事建议不要在服务上设置事务,而是在调用者上设置事务(远程控制器用于角度,批量,IHM控制器,如jsf ......)。 我发现了这种方法的兴趣。
您如何看待这个?
答案 0 :(得分:0)
你可能需要两者。服务应该是事务性的,或者至少SUPPORTS
用于读取/选择。但是,在Web控制器或其他顶级层中,如果您调用多个服务, 还需要进行交易。
但是,请注意,如果控制器是具体类,则需要使用AOP或其他代理机制将函数包装在事务层中。另一种选择是在TransactionTemplate
中自动装入控制器并在需要的地方手动进行TX管理。
显然,TX模板方法意味着您必须小心在需要时实际使用它。使用代理方法,您可以使每个控制器功能都是事务性的。但是,如果只有少数函数可以进行多个服务调用,那么开销可能比您想要的要多。