Java服务事务实践

时间:2015-11-24 10:44:37

标签: java spring transactional

我们使用@Transactional注释来定义事务,或者使用défine事务来定义事务。 我们还用于定义服务上的事务或特定于其方法的事务。

最近,一位同事建议不要在服务上设置事务,而是在调用者上设置事务(远程控制器用于角度,批量,IHM控制器,如jsf ......)。 我发现了这种方法的兴趣。

您如何看待这个?

1 个答案:

答案 0 :(得分:0)

你可能需要两者。服务应该是事务性的,或者至少SUPPORTS用于读取/选择。但是,在Web控制器或其他顶级层中,如果您调用多个服务, 还需要进行交易。

但是,请注意,如果控制器是具体类,则需要使用AOP或其他代理机制将函数包装在事务层中。另一种选择是在TransactionTemplate中自动装入控制器并在需要的地方手动进行TX管理。

显然,TX模板方法意味着您必须小心在需要时实际使用它。使用代理方法,您可以使每个控制器功能都是事务性的。但是,如果只有少数函数可以进行多个服务调用,那么开销可能比您想要的要多。